python--クローズド・ラーニング

2611 ワード

クローズド・コンセプト:
Closure:内部関数でenclossing役割ドメインの変数を参照する
enclosing役割ドメイン:関数内部と埋め込み関数間
例1:
#coding:utf-8

def set_passline(passline):
    def cmp(val):
        if val>= passline:
            print "passline is %d"%passline
            print "%d is pass"%val
        else:
            print "passline is %d"%passline
            print "%d is failed"%val
    return cmp


f_100=set_passline(60)
f_150=set_passline(90)

f_100(89)
f_150(89)

出力:
passline is 6089 is passpassline is 9089 is failed
例2:
 
#coding:utf-8
def my_sum(*arg):
    return sum(arg)
def my_average(*arg):
    return sum(arg)/len(arg)

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

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

 
出力:
('in_dec arg=', (1, 2, 3, 4, 5))15('in_dec arg=', (1, 2, 3, 4, 5, '6'))0('in_dec arg=', (1, 2, 3, 4, 5))3('in_dec arg=', ())0
 
へいほうさよう
1:パッケージ
2:コード多重化