zoukankan      html  css  js  c++  java
  • python学习之闭包

    4.8闭包

    4.8.1闭包的定义

    ​ 1. 闭包是嵌套在函数中的函数。

    ​ 2. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用。

    闭包函数的空间不会随着函数的结束而消失,被引用的变量称为自由变量

    4.8.2闭包的判断

    # 例一:
    def wrapper():
        a = 1
        def inner():
            print(a)
        return inner
    ret = wrapper()
    
    # 例二:
    a = 2
    def wrapper():
        def inner():
            print(a)
        return inner
    ret = wrapper()
    
    # 例三:
    def wrapper(a,b):
        def inner():
            print(a)
            print(b)
        return inner
    a = 2
    b = 3
    ret = wrapper(a,b)
    

    关于闭包的一些函数

    def make_averager():
        series = []
        def averager(new_value):
            series.append(new_value)
            total = sum(series)
            return total/len(series)
        return averager
    avg = make_averager()
    # 函数名.__code__.co_freevars 查看函数的自由变量
    print(avg.__code__.co_freevars)   # ('series',)
    
    #还有一些参数,仅供了解:
    
    # 函数名.__code__.co_freevars 查看函数的自由变量
    print(avg.__code__.co_freevars)  # ('series',)
    # 函数名.__code__.co_varnames 查看函数的局部变量
    print(avg.__code__.co_varnames)  # ('new_value', 'total')
    # 函数名.__closure__ 获取具体的自由变量对象,也就是cell对象。
    # (<cell at 0x0000020070CB7618: int object at 0x000000005CA08090>,)
    # cell_contents 自由变量具体的值
    print(avg.__closure__[0].cell_contents)  # []
    

    4.8.3闭包的作用

    闭包的作用:保存局部信息不被销毁,保证数据的安全性。

    闭包的应用

    1. 可以保存一些非全局变量但是不易被销毁、改变的数据。
    2. 装饰器。
    仅供参考,欢迎指正
  • 相关阅读:
    git常用命令大全
    谷粒商城遇到的问题
    谷粒商城Seata(四十一)
    通过VMware Horizon Client访问虚拟机
    Qt 让窗口(或控件)居中
    QT 设置QDockWidget的初始大小
    Qt QDockWidget小结
    Qt QDockWidget停靠窗相关的信号
    Qt 基于Qt的词典开发系列--无边框窗口的缩放与拖动
    Qt 创建停靠悬浮窗口 QDockWidget
  • 原文地址:https://www.cnblogs.com/jjzz1234/p/11072968.html
Copyright © 2011-2022 走看看