L20 Python 内置函数和闭包 理解
本帖最后由 foxdai 于 2020-4-1 15:23 编辑1、闭包的理解
a.定义1:
如果一个函数定义在另一个函数的作用域内,并且引用了外层函数的变量,则该函数称为闭包。闭包是Python所支持的一种特性,它让在非global scope定义的函数可以引用其外围空间中的变量,这些外围空间中被引用的变量叫做这个函数的环境变量。环境变量和这个非全局函数一起构成了闭包。
定义2:
闭包从表现形式上定义为如果在一个内部函数里对外部作用域的变量进行引用(但不是对全局作用域的变量进行引用)那么内部函数就被称为闭包。
b.闭包特点:
一个函数返回的函数对象,这个函数对象执行的话依赖非函数内部的变量值,这个时候,函数返回的实际内容如下:“函数对象”和“函数对象需要使用的外部变量和变量值”
c.再理解:
闭包必须嵌套在一个函数里,必须返回一个调用外部变量的函数对象,才是闭包
通俗理解就是:里面函数执行,需要用到外面函数的一个变量 ,所以,就把外面变量和里面这个函数合到一块,合到一块的这两个东西就是闭包
2、闭包的定义为:
a.在函数内部定义的函数,称为内部函数
b.内部函数调用了外部函数的局部变量
c.即使内部函数返回了,还是可以使用局部变量
d.通常闭包函数的内层函数都要被返回给外部函数
e.闭包函数的外部函数可以在任何地方被调用,而不再受函数定义时层级的限制
3、闭包函数的作用
a.闭包函数自带函数作用域
正常意义上的函数,在函数执行过程中查找变量的顺序是一层一层向外找,符合LEGB(Local->Enclose->Global->Built in)法则的;
但是对闭包函数来说,查找变量只会找内部函数外面的那一层,因为闭包函数本身就自带一层作用域,这样才符合"闭包"两个字的意思
b.延迟计算(也叫惰性计算)
在上面的例子里,执行foo()函数的返回结果是一个包含自带的某种状态的函数,实际上这个函数并没有执行,
以后想执行这个自带状态的函数时,把func()返回结果所赋值的那个变量加括号就可以执行了,
c.要想让一个函数始终保持一种状态,就可以使用闭包
【引用https://www.cnblogs.com/xiaxiaoxu/p/9785687.html
4. Python中没有过程,只有函数。
没有返回值的称为过程 。
一般我们称某个函数时整型函数,就是因为函数的返回值是整型。Python中只有函数,没有过程,所以Python中的函数都有返回值。
我们是通过return返回表达式。虽然有的函数没有return表达式,但是也有返回值。返回值为‘None’。
5、全局变量的修改(注意全局和具备变量的同名)
当我们在函数体内修改全局变量时,函数内会自动创建一个新的局部变量,而这个局部变量和全局变量的名字相同,
————————————————
原文链接:https://blog.csdn.net/lhyhaiyan/article/details/104383876
页:
[1]