-
#定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(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。查看全部
-
函数实质与属性 #定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(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。查看全部
-
Python变量查找顺序(下图) 如以下函数: 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_fun() def Max(val1,val2): return max(val1,val2) #max()为Python运行时自动导入的方法,作用域在build-in中 func(89) print (Max(89,90))查看全部
-
语法糖是把函数作为一个参数传给原函数,然后把它的返回值作为原参数的结果。
注意#bar()->in_deco()->bar()
代码里面有一个return func(*arg)调用传入的函数,完成sum aveage这样的功能
装饰器存在的目的是为本来要进行的函数(sum,average)进行包装,包装的意思一方面是多进行一些操作,另一方面是对一些函数具有想同逻辑的进行抽象,如果没有return操作,那就是包装袋里没有实物,就失去了本来的意义
查看全部 -
函数调用顺序:(点击编辑查看) #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)函数可以嵌套定义,即在一个函数内部可以定义另一个函数 #代码示例 1def counter(start_at=0): 2 count = [start_at] 3 def incr(): 4 count[0] += 1 #对局部变量的引用 5 return count[0] 6 return incr #返回一个函数对象 7 8 9if __name__ == '__main__': 10 c = counter(3) 11 print type(c) 12 print c() 13 print c() 闭包会保留来自外围作用域变量的信息。 Python 中函数对象都拥有一个 __closure__ 属性。 __closure__ 对象返回一个由 cell 对象组成的元组,cell 对象记录了定义在外围作用域的变量信息。 对于那些不是闭包的函数对象来说,__closure__ 属性值为 None。查看全部
-
装饰器就是在原有函数功能上进行装饰添加然后再将原函数和装饰内容结合进行返回查看全部
-
完整代码的简单实现查看全部
-
闭包 传函数的实例查看全部
-
LEGB: L>E>G>B 查找顺序优先级 L:local函数内部作用域,是最底层的单个函数里面; E:enclosing函数内部与内嵌函数之间,是有内部函数的函数里面; G:global 全局作用域,是一个.py文件中; B:build-in内置作用域,比如:tuple,list,元组。是所有.py文件中。查看全部
-
def set_passline(passline): def cmp(val): if val >= passerine: print('Pass') else: print('failed') return cmp f_100 = set_passline(60) f_100(89) //不要想說是在使用,set_passline , 實際使用的,是 cmp() 一開始的 f_100 = set_passline(60) 是 passline 數值的定義 之後的 f_100(89) 就是使用 cmp() 因為事實上,也是 cmp() 被傳給 f_100 , 已經跟 set_passline() 無關了查看全部
-
闭包closure:内部函数中对enclosing(外层函数)作用域的变量进行引用 如果内部函数对外部函数变量进行引用则该变量会添加到内部函数的__closure__属性中查看全部
-
local是最底层的单个函数里面 enclosing 是有内部函数的函数里面 global 是一个.py文件中 build-in是所有.py文件中查看全部
-
函数值如果不显式的指定return值,默认是None。查看全部
-
my_sum = dec(my_sum)中:第一个my_sum只是相当于一个变量名,名字可以随便定义,但是非定义成与函数my_sum重名,容易引起误解 外层函数的形参变量也可以是函数,然后在外层函数返回内层函数,内层函数返回外层函数的形参变量。查看全部
举报
0/150
提交
取消