python闭包与装饰器

2018-11-01  本文已影响2人  亿万年星空

闭包

如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。它只不过是个“内层”的函数,由一个名字(变量)来指代,而这个名字(变量)对于“外层”包含它的函数而言,是本地变量。
实例:

def set_passline(passline):
    def cmp(val):
        if val >= passline:
            print ('pass')
        else:
            print ('failed')
    return cmp

f_100 = set_passline(60)
f_100(89)

f_150 = set_passline(90)
f_150(89)

装饰器

简单地来说装饰器就是在不改变原有函数的前提下,为函数加入新的功能。

实例:

def dec(func):
    def in_dec(*arg):
        if len(arg) == 0:
            return 0
        for val in arg:
            if not isinstance(val , int):
                return 0
        
        return func(*arg)
    return in_dec

@dec
def my_sum(*arg):
    return sum(arg)

def my_average(*arg):
    return sum(arg)/len(arg)
#my_sum = dec(my_sum)
my_average = dec(my_average)

print (my_sum(1,2,5,4,5))

print (my_sum(1,2,3,4,5,'6'))

上一篇下一篇

猜你喜欢

热点阅读