zoukankan      html  css  js  c++  java
  • python 闭包

      闭包:

    对闭包的具体定义有很多种说法,这些说法大体可以分为两类:

    ◆一种说法认为闭包是符合一定条件的函数,比如参考资源中这样定义闭包:闭包是在其词法上下文中引用了自由变量的函数。

    ◆另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。比如参考资源中就有这样的的定义:在实现深约束时,需要创建一个能显式表示引用环境的东西,并将它与相关的子程序捆绑在一起,这样捆绑起来的整体被称为闭包。

    python中闭包 表示内层函数 由一个变量指代 而这个变量对于外层包含的函数而言是本地变量   看一个例子:

    def make_adder(addend):
        def adder(augend):
            return augend + addend
    return adder

    执行 p =  make_adder(23) 将产生内层函数adder() 的一个闭包  这个闭包在内部引用了名字  addend  而   addend = 23  可以理解为 p = augend + 23  只不过p是一个函数 可以传递一个参数 再次执行类似于 

    print p(100)
    
    #将得到结果 123

      再比如

    import string
    def translator(frm='',to='',delete='',keep=None):
        if len(to) == 1:
            to = to * len(frm)
        trans = string.maketrans(frm,to)
        if keep is not None:
            allchars = string.maketrans('','')
            delete = allchars.translate(allchars,keep.translate(allchars,delete))
            #keep.translate(allchars,delete)  表示去掉keep和deleted中共有的字符 
        def translate(s):
            return s.translate(trans,delete) 
    return translate

    首先

    digits_only = translator(keep=string.digits)

    digits_only = translate(s)
    #  s.translate(trans,delete) # delete 表示除数字外的所有字符
    digits_only('12345,abcd') = translate('12345,abcd')

    结果为',abcd'
  • 相关阅读:
    抓包来看ftp状态码
    socket基础篇
    密码复杂度检查函数
    time模块
    读取日志文件,搜索关键字,打印关键字前5行。yield、deque实例
    装饰器--函数
    yield用法
    字符编码
    pycharm + git实现两台电脑代码同步
    PyCharm常见用法
  • 原文地址:https://www.cnblogs.com/cacique/p/2602366.html
Copyright © 2011-2022 走看看