python 闭包初识

 1 def func_100(val):
 2     passline = 60
 3     if val >= passline:
 4         print('pass')
 5     else:
 6         print('failed')
 7 
 8 def func_150(val):
 9     passline = 90
10     if val >= passline:
11         print('pass')
12     else:
13         print('failed')
14 
15 func_100(89)
16 func_150(89)
17 
18 输出:pass
19          failed
未使用闭包
def set_passline(passline):
    def cmp(val):
        if val >= passline:
            print('pass')
        else:
            print('failed')
    return cmp

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

输出:pass
         failed
使用闭包
 1 def my_sum(*arg):
 2     if len(arg) == 0:
 3         return 0
 4     for val in arg:
 5         if not isinstance(val, int):
 6             return 0
 7     return sum(arg)
 8 
 9 def my_average(*arg):
10     if len(arg) == 0:
11         return 0
12     for val in arg:
13         if not isinstance(val, int):
14             return 0
15     return sum(arg)/len(arg)
16 
17 print(my_sum(1, 2, 3, 4, 5))
18 print(my_sum(1, 2, 3, 4, 5, '6'))
19 print(my_average(1, 2, 3, 4, 5))
20 print(my_average())
21 
22 输出:15
23          0
24          3
25          0
未使用闭包
 1 def my_sum(*arg):
 2     return sum(arg)
 3 
 4 def my_average(*arg):
 5     return sum(arg)/len(arg)
 6 
 7 def dec(func):
 8     def in_dec(*arg):
 9         if len(arg) == 0:
10             return 0
11         for val in arg:
12             if not isinstance(val, int):
13                 return 0
14         return func(*arg)
15     return in_dec
16 
17 my_sum = dec(my_sum)
18 my_average = dec(my_average)
19 
20 print(my_sum(1, 2, 3, 4, 5))
21 print(my_sum(1, 2, 3, 4, 5, '6'))
22 print(my_average(1, 2, 3, 4, 5))
23 print(my_average())
24 
25 输出:15
26          0
27          3
28          0
使用闭包

 

闭包作用

1:封装

2:代码复用

posted @ 2018-01-25 17:57  wjstud  阅读(93)  评论(0编辑  收藏  举报