day10作业—闭包

1.函数名的使用

函数名可以当做值赋值给变量
def func():
    print(1)
print(func)  # 函数的内存地址

a = func
a()
func()# 函数名可以当做值赋值给变量
View Code
#函数名可以当做元素放到容器里  
def func2():
    print(2)

l1 = [func,func2]
print(l1)    #函数名可以当做元素放到容器里

l1 = [func(),func2()]#None , None
print(l1)
View Code
#发现 函数名先调用 计算  prinT(6+7)=打印 13 不是打印 6+7
                    # 不是从前往后 先计算后面的 后面有值 返回或打印
return aa() # 传的是值
# return aa # 传的是地址
View Code
# 楼梯 是 定义  箭头是 调用
def f():
    def a():
        def b():
            def c():
                return '传递'
            return c()
        return b()
    return a()
print(f())
View Code

2.闭包

#1. 一个嵌套函数
#2.在嵌套函数的内部函数使用外部(非全局的变量)
#满足以上两条
判断 不是 None
def wrapper():
    a = 10
    def inner():
        print(a)
    return inner # 返回的地址 第5步
    # inner()
    print(inner.__closure__)#不是None jius就是闭包
View Code
# 普通函数 执行调用完 了就销毁了
#python中 闭包 会进行内存驻留
# money = 10 # 以后不要这么干
#全局里存放 会有污染和不安全的现象
# 面试必问 , 装饰器 ---装饰器的本质就是闭包
# 闭包有个弊端: 会出现内存泄露
money = 10
def wrapper():
    money = 10
    def inner(num):
        nonlocal money
        money += num
        print(money)
    return inner
wrapper()(100)
View Code

猜你喜欢

转载自www.cnblogs.com/Doner/p/10535415.html