(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() #通过方返回闭包函数的函数名