python全棧學習--day11(函數高級應用)
阿新 • • 發佈:2018-03-31
消失 使用 args 檢測 1.10 內存 位置 com 遇到
一,函數名是什麽?
函數名是函數的名字,本質:變量,特殊的變量。
函數名()執行此函數
‘‘‘ 在函數的執行(調用)時:打散。 *可叠代對象(str,tuple,list,dict(key))每一個元素添加到args元組中。 **dict 將字典的鍵值對添加到kwargs字典中。 在函數的定義時: 聚合。 *args將所有的位置參數聚合到一個元組中。 **kwargs 將所有的關鍵字參數聚合到一個字典中。 ‘‘‘
#python 2 沒有nonlocal
1.單獨打印函數名
def func1(): print(666) print(func1)
執行輸出:#(單獨打印函數名為函數的內存地址)
2. 函數名的賦值:
def func2(): print(666) f = func2 print(f())
#說明:這裏主要告訴你的是函數名是可以賦值的。這裏其實是沒有返回值的,所以為None,而666 只是函數體內的print
3. 函數名可以作為容器類數據的元素
案例一:
def f1(): print(1211) def f2(): print(1222) def f3(): print(1233) def f4(): print(1233) f1() f2() f3() f4()
執行後輸出:
說明:這裏是不是很麻煩呢?這裏每一次使用都要寫一個函數?這樣豈不是還是有重復性的代碼呢?
案例二:(這裏實現一個最簡單的應用)
def f1(): print(1211) def f2(): print(1222) def f3(): print(1233) def f4(): print(1233) l1 = [f1,f2,f3,f4] for i in l1: i()
4 函數名可以作為參數。
def f1(): print(666) def f2(x): x() f2(f1)
解析:
a = 1 def f1(x): #2. 這裏這個時候f1(1) print(x) # 3.打印f1的形參 f1(a) #1,將變量a =1 的值 1傳入f1中
執行後輸出:1
5.函數名可以作為函數的返回值
def f11(x): #2.第二步形參得到實參傳入的值為:5
return x #3. 第三步返回給函數調用者 f11(5)
ret = f11(5) # 1.第一步將5傳入函數 f11中
print(ret)
#閉包
#閉包:就是內層函數對外層函數(非全局)變量引用
#實例一:將內層函數的666在外層打印出來
def wraaper():
def inner():
print(666)
inner()
wraaper()
#打印後輸出:666
#方法二:
def wraaper():
def inner():
print(666)
return inner
wraaper()()
#如何檢測閉包
def wraaperl(): name = ‘老男孩‘ def inner(): print(name) inner() print(inner.__closure__) #cell 如何這裏i為none 就是不是閉包 # wraaperl()
#如何判斷 內層函數名.__closure__ cell 就是閉包
閉包:當函數開始執行時,如果遇到了閉包,他有一個機制,他會永遠開辟一個內存空間,將閉包變量等值放入其中,不會隨著函數的執行完畢而消失
裝飾器的初始:
def add_b(): b = 42 def do_global(): b = 10 print(b) # 1.10 def dd_nonlocal(): nonlocal b b = b + 20 print(b) # 2.30 dd_nonlocal() print(b) # 3.30 do_global() print(b) # 4.42 add_b()
python全棧學習--day11(函數高級應用)