python--クローズド・ラーニング
2611 ワード
クローズド・コンセプト:
Closure:内部関数でenclossing役割ドメインの変数を参照する
enclosing役割ドメイン:関数内部と埋め込み関数間
例1:
出力:
passline is 6089 is passpassline is 9089 is failed
例2:
出力:
('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:コード多重化
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:コード多重化