Python自学笔记(13day)

(1)函数的嵌套

  (1)首先明白三点:调用函数意思就是:调用函数所得到的结果是什么。     函数没有被调用,则函数里面代码永远不会被执行。   调用函数只有拿到返回值才有结果

def func():
    def su():
        print("shuai")
func()


#输出:啥都没有因为su()没有被调用
def func():
    def su():
        print("shuai")
     su()


func()


#输出:shaui 
           none
因位执行到su()打印出shuai就结束了,函数func()没有拿到返回值。
def func():
    def su():
        print("shuai")
        return shuai
    su()


func()


#输出:shuai
           shuai
因位执行到su()打印出shuai就结束了,函数func()也拿到返回值。

 (2)函数的多层嵌套

def  inner   ():
    a=1
    def inner1():
        b=2
        print(a)
        print("inner")
        def inner2():
            print(a)
        inner2()
inner()

总结:(1)全局变量不能用局部变量,局部变量看可以用全局变量,但是不可对全局变量中的不可变数据类型进行修改(即对其加减乘除),如果想要修改用gloabl(),它声明的是去全局变量。

    (2)同理,内部函数可以用外函数中的变量,但是不可对其修改,如想修改用nonlocal(),它声明的是距离它最近的上一层函数中的局部变量。

def  inner   ():
    a=1
    def inner1():
        b=2
        nonlocal a           #声名a
        a+=1
        print(a)
        print("inner")
        def inner2():
            print(a)
        inner2()
inner()        

(3)函数的本质

函数之所以能被调用,比如func()就可以调用函数,是因为:func()=func+()=函数名地址+()=调用

(1)函数名字是可以被赋值的

(2)函数名字可以作为容器类型的元素

(3)函数名字可以作为函数的参数

(4)函数名字可以作为函数的返回值

举列子针对(4)

def func():
    print(123)
def wawa(f):
    f()
    return f

xing=wawa(func)
xing()


#输出:123
123

 

 

函数的闭包

(1)闭包:嵌套函数,且内部函数调用了外部函数的变量

def outer():
    a=1
    def inner():
        print(a)
    print(inner.__closure__)   #inner.__closure__:用来打印看函数是否为闭包函数

outer()

(2)闭包函数的调用

一般来说我们调用闭包函数,是直接调用闭包函数,而不必通过调用总的函数。

def outer():
    a=1
    def inner():
        print(a)
    return inner


inn=outer()
inn()


#通过方返回闭包函数的函数名

 

posted @ 2018-09-18 22:14  诺诺诺亚索隆  阅读(121)  评论(0编辑  收藏  举报