-
函數(shù)也是對象。在定義f_60(f_60 = set_passline(60))的時候實際上是定義了變量passline值為60的test函數(shù)對象。 執(zhí)行f_60(85),就是執(zhí)行passline值為60,score值為85的test函數(shù)對象 一切皆對象。 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查看全部
-
主要內(nèi)容查看全部
-
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函數(shù)傳入deco()中,即deco(bar),這里返回了in_deco #2、bar = in_deco #3、in_deco中執(zhí)行到最后一句,使用到bar函數(shù) @deco #會執(zhí)行代碼,將其下面的函數(shù)傳進去,相當于調用了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查看全部
-
函數(shù)調用順序:(點擊編輯查看) #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函數(shù)返回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查看全部
-
函數(shù)實質與屬性 #定義:如果在一個內(nèi)部函數(shù)里,對在外部作用域(但不是在全局作用域)的變量進行引用,那么內(nèi)部函數(shù)就被認為是閉包(closure) 分解來說,包含下面3個條件: 1) 需要函數(shù)嵌套, 就是一個函數(shù)里面再寫一個函數(shù). 2) 外部函數(shù)需要返回一個內(nèi)部函數(shù)的引 3) 外部函數(shù)中有一些局部變量, 并且, 這些局部變量在內(nèi)部函數(shù)中有使用 一些概念: 1)自由變量: 外部函數(shù)中定義的局部變量, 并且在內(nèi)部函數(shù)中被使用 2) 閉包: 那個使用了自由變量并被返回的內(nèi)部函數(shù)就稱為閉包 #支持閉包的語言有這樣的特性: 1)函數(shù)是一階值(First-class value),即函數(shù)可以作為另一個函數(shù)的返回值或參數(shù),還可以作為一個變量的值 2)函數(shù)可以嵌套定義,即在一個函數(shù)內(nèi)部可以定義另一個函數(shù) #代碼示例(點開編輯查看) #coding:utf-8 #閉包:實現(xiàn)封裝,實現(xiàn)代碼復用 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是函數(shù),也即返回的函數(shù)cmp f_150 = set_passline(90) f_100(89) f_150(89) 閉包會保留來自外圍作用域變量的信息。 Python 中函數(shù)對象都擁有一個 __closure__ 屬性。 __closure__ 對象返回一個由 cell 對象組成的元組,cell 對象記錄了定義在外圍作用域的變量信息。 對于那些不是閉包的函數(shù)對象來說,__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()函數(shù)中找到了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函數(shù)傳入deco()中,即deco(bar),這里返回了in_deco #2、bar = in_deco #3、in_deco中執(zhí)行到最后一句,使用到bar函數(shù) @deco #會執(zhí)行代碼,將其下面的函數(shù)傳進去,相當于調用了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查看全部
-
函數(shù)調用順序:(點擊編輯查看) #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函數(shù)返回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查看全部
-
#定義:如果在一個內(nèi)部函數(shù)里,對在外部作用域(但不是在全局作用域)的變量進行引用,那么內(nèi)部函數(shù)就被認為是閉包(closure) 分解來說,包含下面3個條件: 1) 需要函數(shù)嵌套, 就是一個函數(shù)里面再寫一個函數(shù). 2) 外部函數(shù)需要返回一個內(nèi)部函數(shù)的引 3) 外部函數(shù)中有一些局部變量, 并且, 這些局部變量在內(nèi)部函數(shù)中有使用 一些概念: 1)自由變量: 外部函數(shù)中定義的局部變量, 并且在內(nèi)部函數(shù)中被使用 2) 閉包: 那個使用了自由變量并被返回的內(nèi)部函數(shù)就稱為閉包 #支持閉包的語言有這樣的特性: 1)函數(shù)是一階值(First-class value),即函數(shù)可以作為另一個函數(shù)的返回值或參數(shù),還可以作為一個變量的值 2)函數(shù)可以嵌套定義,即在一個函數(shù)內(nèi)部可以定義另一個函數(shù) #代碼示例(點開編輯查看) #coding:utf-8 #閉包:實現(xiàn)封裝,實現(xiàn)代碼復用 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是函數(shù),也即返回的函數(shù)cmp f_150 = set_passline(90) f_100(89) f_150(89) 閉包會保留來自外圍作用域變量的信息。 Python 中函數(shù)對象都擁有一個 __closure__ 屬性。 __closure__ 對象返回一個由 cell 對象組成的元組,cell 對象記錄了定義在外圍作用域的變量信息。 對于那些不是閉包的函數(shù)對象來說,__closure__ 屬性值為 None。查看全部
舉報
0/150
提交
取消