Python 闭包
高阶函数与闭包
- 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回;
- 如果返回的函数中,包含了原函数的参数或者变量,这种就叫做闭包;
返回的是函数不会被立即执行,再次调用被执行;
def count():
… fs = []
… for i in range(1, 4):
… def f():
… return i*i
… fs.append(f)
… return fs
…
f1, f2, f3 = count()
f1()
9
f2()
9
f3()
9
添加进列表的3个函数返回的值全部都是9
!原因就在于返回的函数引用了变量i
,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i
已经变成了3
,因此最终结果为9
。
改动一:
>>> def count():
... fs = []
... for i in range(1, 4):
... def f():
... return i*i
... fs.append(f())
... return fs
...
>>> f1, f2, f3 = count()
>>> f1
1
>>> f2
4
>>> f3
9
添加进列表的对象由函数 f , 变成了 f 的执行结果 f(),而 f() 的执行结果是一个具体的值。
改动二:
>>> def count():
... fs = []
... def f(j):
... def g()
... return j*j
... return g
... for i in range(1, 4):
... fs.append(f(i))
... return fs
...
>>> f1, f2, f3 = count()
>>> f1()
1
>>> f2()
4
>>> f3()
9
添加进列表的对象由函数 f , 变成了 f 的执行结果 f(i),虽然 f(i) 也返回的是一个函数,但 f(i) 在循环时立刻会被执行,因此 i 的当前值被传入f()。
还没有评论,来说两句吧...