闭包的真实含义:为访问外部函数的内部变量提供了条件。将函数的一切封闭到了函数内部,减少了函数的全局变量
在函数内部定义一个函数,并且这个函数用到了外部函数的变量,那么将这个函数和这个函数用到的变量定义为 闭包(这些变量可能是外部函数的自己定义的变量,也可能是外部函数被调用传入的变量)
python是面向对象的编程语言,python语言中的一切都是对象
当定义一个函数后,可以用'函数名()'调用这个对象
def sum(*args,**kwargs):
print(args,kwargs)
sum(1,2,3,5) # 使用函数名调用了定义的函数
sum_other = sum # 使用另一个变量引用了sum函数对象
sum_other(1,2,3,5,6) # 引用后也是可以进行调用原来的函数
sum(1,2,3,4) # 原来的函数名还是可以调用函数的
#结果 D:pycharm_project装饰器venvScriptspython.exe D:/pycharm_project/装饰器/venv/text.py 1 2 3 5 1 2 3 5 6 1 2 3 4
根据闭包的定义写,写一个带有闭包的函数
def make_closure(num): # 此外层函数的作用是为内层函数提供了变量num def make_closure_1(num_in): # 如果内部函数需要修改外部函数的变量需要使用nolocal+变量名(如果不用修改,只是使用则不需要使用nolocal) return num_in,num # return mum return make_closure_1 # 如果make_closure()被调用,则返回了make_closure_1()函数名 f = make_closure(1) # f = make_closure_1 print(f(2)) # 通过f()调用了make_closure_1()
# 结果 D:pycharm_project装饰器venvScriptspython.exe D:/pycharm_project/装饰器/venv/text.py (2, 1) Process finished with exit code 0