python里的闭包

 1 #定义一个函数
 2 def test(number): 
 3 
 4     #在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么称里面 的这个函数为闭包 
 5 def test_in(number_in):
 6     print("in test_in 函数, number_in is %d"%number_in)
 7     return number+number_in
 8     #其实这里返回的就是闭包的结果
 9     return test_in
10 
11 
12 #给test函数赋值,这个20就是给参数number
13 ret = test(20) 
14 
15 #注意这里的100其实给参数number_in
16 print(ret(100))
17 
18 #注意这里的200其实给参数number_in
19 print(ret(200))
20 
21 运行结果:
22 in test_in 函数, number_in is 100
23 120 
24 
25 in test_in 函数, number_in is 200
26 220
#内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。
# closure.py
def counter(start=0): 
    count=[start] 
    def incr(): 
        count[0] += 1 
        return count[0]
     return incr 

#启动python解释器
>>>import closeure
>>>c1=closeure.counter(5) 
>>>print(c1())
6
>>>print(c1())
7
>>>c2=closeure.counter(100)
>>>print(c2())
101
>>>print(c2())
102

#nonlocal访问外部函数的局部变量
def counter(start=0):
     def incr():
         nonlocal start
        start += 1 
        return start
     return incr

c1 = counter(5)
print(c1())
print(c1())

c2 = counter(50)
print(c2())
print(c2())

print(c1())
print(c1())

print(c2())
print(c2())            
闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。当一个内嵌函数引用其外部作作用域的变量,我们就会得到一个闭包. 总结一下,创建一个闭包必须满足以下几点:
1. 必须有一个内嵌函数
2. 内嵌函数必须引用外部函数中的变量
3. 外部函数的返回值必须是内嵌函数
 
当函数运行完后, 并不被销毁,而是继续留在内存空间里.这个功能类似类里的类变量,只不过迁移到了函数上.
原文地址:https://www.cnblogs.com/Yanss/p/12718094.html