通过例子来理解python闭包。

闭包就是内部函数对enclosing作用域的变量进行引用。(可先参考python函数作用域LEGB

 

通过一个例子体会

 

def func_150(val):

         passline = 90

         if val >=passline:

                   print(‘%d pass’%val)

         else:

                   print(‘failed’)

 

def func_100(val):

         passline = 60

         if val >=passline:

                   print(‘%d pass’%val)

         else:

                   Print(‘failed’)

 

 

def set_passline(passline):  #passline=60

         def cmp(val):  #引用了enclosing作用域中的passline,将其填加到closure属性中,cmp就称为闭包

                   if val >=passline:

                            print(‘pass’)

                   else:

                            print(‘failed’)

                   return cmp

 

f_100 = set_psssline(60)  #返回 cmp,f_100就是一个函数

f_150 = set_passline(90)

f_100(89)      #对f_100进行调用

f_150(89)

 

运行结果:

pass

failed

 

闭包就是内置函数对enclosing作用域变量的使用,它会将变量放到closure属性中,当内部函数处理时会拿过来直接使用。

 

作用:

封装;

代码复用。

 

在闭包中引用函数,通过一个例子体会:

 

Def my_sum(*arg):

         Return sum(arg)

Def my_average(*arg):

         Return sum(arg)/len(arg)

 

Def dec(func):

         Def in_dec(*arg):   #my_sum会放到enclosure属性中,之后可直接对my_sum函数进行引用

                   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)

Print (my_sum(1,2,3,4,5))

结果

15

 

posted on 2017-03-14 20:31  christychang  阅读(218)  评论(0编辑  收藏  举报