1. 程式人生 > >python全棧學習--day11(函數高級應用)

python全棧學習--day11(函數高級應用)

消失 使用 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(函數高級應用)