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'
posted @ 2012-07-21 15:36  cacique  阅读(1025)  评论(0编辑  收藏  举报
Copyright ©2011 Goodspeed Cheng