闭包函数

 
* 函数对象:可以将定义在函数内的函数返回到全局使用,从而打破函数的层级限制。
* 名称空间与作用域:作用域关系在函数定义阶段时就已经固定死了。与调用位置无关,即在任意位置调用函数都需要跑到定义函数时找到作用域关系
def f1():
    x = 1
 
    def inner():
        print(x)
 
    return inner
 
func = f1()
x = 2
 
def f2():
    x = 3
    func()
 
f2()
outputs
1     
 
 
 
闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。闭包指的是:函数内部函数对外部作用域而非全局作用域的变量的引用。
提示:之前外面都是通过参数将外部的值传给函数,闭包提供了另一种思路,包起来喽,包起呦,包起来哇。
def outter():
    x = 1
 
    def inner():
        print(x)
    return inner
 
f = outter()
 
def f2():
    x = 2
    f()
 
f2()
outputs
1    
 
 
 
为函数传参的方式二:包给函数
先定义一个有参函数,在这个有参函数内定义一个无参函数,然后在无参函数内写入需要的代码块,然后返回无参函数的函数名,这样就可以在函数外部,将有参函数赋值给变量名的方式来进行多次调用。
def outter(x):
    x = 1
 
    def inner():
        print(x)
 
    return inner
 
f = outter(6)
f()
f()
# 查看闭包的元素
print(f"f.__closure__[0].cell_contents:{f.__closure__[0].cell_contents}")
Outputs
macname@MacdeMacBook-Pro py % python3 cccccc.py
1
1
f.__closure__[0].cell_contents:1
macname@MacdeMacBook-Pro py %
 
 
 
 
 
 
 
 
 
 
 
 
 
 

原文地址:https://www.cnblogs.com/sea-stream/p/14192816.html