python-4 闭包

函数的闭包

定义:闭包就是内层函数对外层函数非全局变量的引用 !!!!!!

特点:

1. 被引用的非全局变量也被称作是自由变量,它会与内层函数产生一个绑定关系,不会在内存中消失
2. 函数外部无法调用自由变量,故而 起到 保护数据安全 的作用
3. 闭包只能存在于嵌套函数中

举例:方案一:全局变量 l1,缺点数据不安全

l1 = []
def make_average(new_value):
    l1.append(new_value)
    total = sum(l1)
    average = total / len(l1)
    return average


# 举例:遍历字典,格式化输出,函数调动
data = {1: 10, 2: 20, 3: 30}
for i in data:
    print("第%d天的平均收盘价为%s" % (i, make_average(data[i])))
方案二:闭包
def make_average():
    l1 = []  # 自由变量,一直在内存中不会消失,直到 不调用内层函数为止,内层函数使用它这个非全局变量

    def avenger(new_value):
        l1.append(new_value)
        total = sum(l1)
        return total / len(l1)
    return avenger  # 返回内层函数名,即调用内层函数

#判断是否为闭包的方法:定义一个外层函数的引用,利用内置函数查看,用代码判断是否为函数闭包
a1 = make_average()
print(a1.__code__.co_freevars)  #输出一个函数的自由变量,以此来判断是否为闭包
posted @ 2020-02-19 22:27  冰冷的火  阅读(61)  评论(0)    收藏  举报