python 闭包

闭包的真实含义:为访问外部函数的内部变量提供了条件。将函数的一切封闭到了函数内部,减少了函数的全局变量

在函数内部定义一个函数,并且这个函数用到了外部函数的变量,那么将这个函数和这个函数用到的变量定义为 闭包(这些变量可能是外部函数的自己定义的变量,也可能是外部函数被调用传入的变量)

 

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\装饰器\venv\Scripts\python.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\装饰器\venv\Scripts\python.exe D:/pycharm_project/装饰器/venv/text.py
(2, 1)

Process finished with exit code 0

 

posted @ 2018-08-08 15:49  贾祥飞  阅读(133)  评论(0编辑  收藏  举报