在python中,函数可以被嵌套定义,也就是说,函数中可以定义函数。该函数还可以将其内部定义的函数作为返回值返回。
闭包的定义:一般来说,我们可以认为,如果一个函数可以读取其他函数中的局部变量,那么它们就构成了闭包。
注意 :闭包的定义不是特别清晰,但大体上的意思是这样的。
我们知道,普通的函数是可以使用全局变量的
类似的,函数中定义的函数,也是可以使用外部函数的变量的。因此,满足了函数读取了其他函数局部变量的这一条件,他们因此构成了闭包。
在闭包的使用中,我们可以先给外部的函数赋予不同的局部变量,然后再调用其中内部的函数时,就可以读取到这些不同的局部变量了。
外部变量的使用 在普通函数中,虽然可以直接使用全局变量,但是不可以直接修改全局变量。从变量的作用域来说,一旦你尝试修改全局变量,那么就会尝试创建并使用一个同名的局部变量。因此,如果你需要在普通函数中修改全局变量,需要使用global
同样的,如果你希望通过定义在内部的函数去修改其外部函数的变量,那么必须使用nonlocal
这涉及到变量的生命周期问题,一般的,在函数里面声明的变量在函数外是不起作用的。一个比较简单的解决办法是你在函数外就先声明这个变量,声明成全局变量。然后在函数里面进行操作和赋值。
最后就能在函数外获取变量的值了。例如:
123456x = 0def a():x = 2if __name__ == '__main__':a()print x
最终x打印出来的结果就是2
百度知道inside和outside在python中的区别:
示例代码说明:
x = 0 # 全局变量
def outside(): # 定义函数
x = 1 # 局部变量,内嵌函数的外部变量
def inside(): # 定义内嵌函数
x = 2 # 局部变量
return x
return x, inside # 将变量值和函数返回
o, i = outside() # 通过两个变量接收outside函数的返回值x和inside
print(x) # 显示输出结果为:0
print(o) # 显示输出结果为:1
print(i()) # 显示输出结果为:2
刚才的这段代码。
在Python中可以在函数的内部再定义函数。
大家能够看到,在上方代码中函数outside的内部,又定义了一个函数inside。
这种结构就是函数嵌套。
另外,在上方代码中,大家能够看到函数的返回值不仅可以返回多个,而且可以返回内嵌函数(这是闭包,后面会讲到)。
返回内嵌函数时,如果函数名称后方没有加上“()”,调用外层函数时不会立即执行返回的函数,需要在调用外层函数后,添加“()”来执行。例如,上方代码最后一句中的“i()”,就是执行变量中保存的函数。
而且,我们也可以用下面这种方法去执行返回的函数。