在一个函数中,外函数的返回值是内函数,且内函数调用了外函数中的局部变量,这个内函数叫闭包函数
作用:为了保护局部变量不受全局的影响,同时在函数内可以正常使用
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
功能:检测一个函数是否为闭包函数,若是闭包函数,值为cell,否则值为None
print(res.__closure__) print(deal.__closure__) (<cell at 0x000000EB0BE323A8: int object at 0x000000EB135E2A70>,) None