闭包函数
在一个函数中,外函数的返回值是内函数,且内函数调用了外函数中的局部变量,这个内函数叫闭包函数
作用:为了保护局部变量不受全局的影响,同时在函数内可以正常使用
使用全局变量
m = 0
def A() :
global m
m += 100
def B() :
global m
m += 200
def C() :
global m
m -= 50
A()
B()
C()
print(m)
m = 0 # 全局变量很容易被更改
print(m)
250
0
使用闭包函数保护局部变量
def deal() :
capital = 0
def sale() :
nonlocal capital
capital += 350
print(capital)
return sale
res = deal()
print(res,type(res))
res()
res()
res()
# print(capital) 此时在全局不能再对capital这个局部变量进行任何操作
<function deal.<locals>.sale at 0x000000EB09F03318> <class 'function'>
350
700
1050
函数名.closure,
功能:检测一个函数是否为闭包函数,若是闭包函数,值为cell,否则值为None
print(res.__closure__)
print(deal.__closure__)
(<cell at 0x000000EB0BE323A8: int object at 0x000000EB135E2A70>,)
None