-
函数也是对象。在定义f_60(f_60 = set_passline(60))的时候实际上是定义了变量passline值为60的test函数对象。 执行f_60(85),就是执行passline值为60,score值为85的test函数对象 一切皆对象。 def set_passline(passline): def test(score): if score >= passline: print "pass" else: print "faile" return test f_60 = set_passline(60) f_90 = set_passline(90) f_60(85) f_90(85)查看全部
-
L->E->G->B查看全部
-
主要内容查看全部
-
LEGB查看全部
-
LEGB查看全部
-
python3?查看全部
-
LEGB查看全部
-
谢谢查看全部
-
装饰器就是对闭包的使用: #coding:utf-8 def deco(func): #1、 def in_deco(x,y): print('in deco') func(x,y) #3、 print('call deco') #0、 return in_deco #1、 #1、将bar函数传入deco()中,即deco(bar),这里返回了in_deco #2、bar = in_deco #3、in_deco中执行到最后一句,使用到bar函数 @deco #会执行代码,将其下面的函数传进去,相当于调用了bar = dec(bar) def bar(x,y): print("in bar",x+y) print(type(bar)) bar(2,4) 输出: call deco <class 'function'> in deco in bar 6查看全部
-
函数调用顺序:(点击编辑查看) #coding:utf-8 def my_sum(*arg): #3、 print('my_sum') return sum(arg) def my_average(*arg): print('my_average') return sum(arg)/len(arg) def dec(func): def in_dec(*arg): #闭包 1、 print('in_dec()=',arg) if len(arg) == 0: return 0 for val in arg: if not isinstance(val, int): return 0 return func(*arg) #2、 return in_dec #2、 my_sum = dec(my_sum) #1、dec函数返回in_dec -> my_sum #2、my_sum = in_dec(*arg) print(my_sum(1,2,3,4,5)) print(my_sum(1,2,3,4,5,'6')) 打印结果: in_dec(*arg)= (1, 2, 3, 4, 5) my_sum 15 in_dec(*arg)= (1, 2, 3, 4, 5, '6') 0查看全部
-
函数实质与属性 #定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure) 分解来说,包含下面3个条件: 1) 需要函数嵌套, 就是一个函数里面再写一个函数. 2) 外部函数需要返回一个内部函数的引 3) 外部函数中有一些局部变量, 并且, 这些局部变量在内部函数中有使用 一些概念: 1)自由变量: 外部函数中定义的局部变量, 并且在内部函数中被使用 2) 闭包: 那个使用了自由变量并被返回的内部函数就称为闭包 #支持闭包的语言有这样的特性: 1)函数是一阶值(First-class value),即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值 2)函数可以嵌套定义,即在一个函数内部可以定义另一个函数 #代码示例(点开编辑查看) #coding:utf-8 #闭包:实现封装,实现代码复用 def set_passline(passline): #passline = 60 def cmp(val): #cmp() -> 闭包 if val >= passline: print('pass') else: print("failed") return cmp f_100 = set_passline(60) #f_100是函数,也即返回的函数cmp f_150 = set_passline(90) f_100(89) f_150(89) 闭包会保留来自外围作用域变量的信息。 Python 中函数对象都拥有一个 __closure__ 属性。 __closure__ 对象返回一个由 cell 对象组成的元组,cell 对象记录了定义在外围作用域的变量信息。 对于那些不是闭包的函数对象来说,__closure__ 属性值为 None。查看全部
-
# -*- encoding:utf-8 -*- passline = 60 # 全局变量,作用域在global中 def func(val): passline = 90 # 局部变量,作用域在local中 if val >= passline: # val也是局部变量,作用域在local中 print ('pass') else: print ('failed') def in_func(): print(val) # 此处val作用域在enclosing中,在func()函数中找到了val值 in_func() def Max(val1, val2): return max(val1, val2) # max()为Python运行时自动导入的方法,作用域在build-in中 func(89) print (Max(89, 90))查看全部
-
装饰器就是对闭包的使用: #coding:utf-8 def deco(func): #1、 def in_deco(x,y): print('in deco') func(x,y) #3、 print('call deco') #0、 return in_deco #1、 #1、将bar函数传入deco()中,即deco(bar),这里返回了in_deco #2、bar = in_deco #3、in_deco中执行到最后一句,使用到bar函数 @deco #会执行代码,将其下面的函数传进去,相当于调用了bar = dec(bar) def bar(x,y): print("in bar",x+y) print(type(bar)) bar(2,4) 输出: call deco <class 'function'> in deco in bar 6查看全部
-
函数调用顺序:(点击编辑查看) #coding:utf-8 def my_sum(*arg): #3、 print('my_sum') return sum(arg) def my_average(*arg): print('my_average') return sum(arg)/len(arg) def dec(func): def in_dec(*arg): #闭包 1、 print('in_dec()=',arg) if len(arg) == 0: return 0 for val in arg: if not isinstance(val, int): return 0 return func(*arg) #2、 return in_dec #2、 my_sum = dec(my_sum) #1、dec函数返回in_dec -> my_sum #2、my_sum = in_dec(*arg) print(my_sum(1,2,3,4,5)) print(my_sum(1,2,3,4,5,'6')) 打印结果: in_dec(*arg)= (1, 2, 3, 4, 5) my_sum 15 in_dec(*arg)= (1, 2, 3, 4, 5, '6') 0查看全部
-
#定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure) 分解来说,包含下面3个条件: 1) 需要函数嵌套, 就是一个函数里面再写一个函数. 2) 外部函数需要返回一个内部函数的引 3) 外部函数中有一些局部变量, 并且, 这些局部变量在内部函数中有使用 一些概念: 1)自由变量: 外部函数中定义的局部变量, 并且在内部函数中被使用 2) 闭包: 那个使用了自由变量并被返回的内部函数就称为闭包 #支持闭包的语言有这样的特性: 1)函数是一阶值(First-class value),即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值 2)函数可以嵌套定义,即在一个函数内部可以定义另一个函数 #代码示例(点开编辑查看) #coding:utf-8 #闭包:实现封装,实现代码复用 def set_passline(passline): #passline = 60 def cmp(val): #cmp() -> 闭包 if val >= passline: print('pass') else: print("failed") return cmp f_100 = set_passline(60) #f_100是函数,也即返回的函数cmp f_150 = set_passline(90) f_100(89) f_150(89) 闭包会保留来自外围作用域变量的信息。 Python 中函数对象都拥有一个 __closure__ 属性。 __closure__ 对象返回一个由 cell 对象组成的元组,cell 对象记录了定义在外围作用域的变量信息。 对于那些不是闭包的函数对象来说,__closure__ 属性值为 None。查看全部
举报
0/150
提交
取消