一、函式名的應用
函式名是乙個變數,但他是乙個特殊的變數,與括號配合可以執行函式的變數。
1、函式名的記憶體位址
deffunc():
print('哈哈'
(func)
結果:
2、函式名可以賦值給其他變數
deffunc():
print('哈哈'
(func)
a =func #把函式當成乙個變數,賦值給另乙個變數
a() #呼叫函式 func()
3、函式名可以當做容器類元素
deffunc1():
print('哈哈'
)def
func2():
print('呵呵'
)def
func3():
print('嘻嘻'
)lst =[func1,func2,func3]
for i in
lst:
i()
4、函式名可以當做函式的引數
deffunc():
print('
吃了嗎?')
deffunc2(fn):
print('
我是func2')
fn()
#執行傳遞過來的fn
print('
我是func2')
func2(func)
#把函式func當成引數傳遞給func2的引數fn
5、函式名可以作為函式的返回值
def執行結果:func1():
print('
這裡是函式1')
deffunc2():
print('
這裡是函式2')
print('
這裡是函式1')
return
func2
fn = func1() #
執行函式1,函式1返回的是函式2,這時fn指向的就是上面函式2
fn() #
執行上面返回的函式
這裡是函式1
這裡是函式1
這裡是函式2
二、閉包
閉包就是內層函式對外層函式(非全域性)變數的引用。
deffunc1():
name = '
alex
'def
func2():
(name) #閉包
func2()
func1()
#結果: alex
我們可以使用_closure_來檢測函式是否是閉包,使用函式名._closure_返回cell就是閉包,返回none就不是閉包。
deffunc1():
name = '
alex
'def
func2():
(name)
func2()
print(func2.__closure__
) #(,)
func1()
如何在函式外邊呼叫內部函式呢? return
deffunc1():
name = '
alex'#
內部函式
deffunc2():
(name)
return
func2
fn = func1() #
訪問外部函式,獲取到內部函式的函式位址
fn() #
訪問內部函式
如果多層巢狀呢,只需要一層一層的往外層返回就行了
deffunc1():
deffunc2():
deffunc3():
print('哈哈'
)
return
func3
return
func2
func1()()()
python規定,如果你在記憶體函式中訪問了外層函式的變數,那麼這個變數將不會消亡,將會常駐記憶體。也就是說,使用閉包,可以保證外層函式中的變數在記憶體中常駐。
閉包的作用就是讓乙個變數能夠常駐記憶體,供後面的程式使用。
三、裝飾器初識
軟體設計原則
一、開閉原則。 開放:對功能擴充套件開放 封閉:對修改**封閉
deffruit():
print('結果'
)def
water(fn):
definner():
print('澆水'
) fn()
print('開花'
)
return
inner
fruit =water(fruit)
fruit()
語法糖:@裝飾器
defwater(fn):
definner():
print('澆水'
) fn()
print('開花'
)
return
inner
@water
#相當於fruit = water(fruit)
deffruit():
print('結果'
)fruit()
帶返回值的裝飾器
defwen_jin(fn):
def inner(*args,**kwargs):
print('
質量怎麼樣')
ret = fn(*args,**kwargs)
print('騙我'
)
return
ret
return
inner
@wen_jin
defyue(name):
print('
約一約'
,name)
return
'小蘿莉
'ret = yue('
小姐姐'
)print(ret)
裝飾器模型**
#裝飾器:對傳遞進來的函式進行包裝,可以在目標函式之前和之後新增任意的功能
def
def inner(*args,**kwargs):
'執行目標函式之前要執行的內容
'ret = func(*args,*kwargs)
'執行目標函式之後要執行的內容
'return
ret
return
inner
#def
target_func():
print('
我是目標函式')
#呼叫目標函式
target_func()
Day 11 函式名,閉包,裝飾器 作業
1 整理裝飾器的形成過程,背誦裝飾器的固定格式 2 編寫裝飾器,為多個函式加上認證的功能 使用者的賬號密碼 於檔案 要求登入成功一次,後續的函式都無需再輸入使用者名稱和密碼 3.1.為題目3編寫裝飾器,實現快取網頁內容的功能 公升級題 4.寫函式,返回乙個撲克牌列表,裡面有52項,每一項是乙個元組 ...
Python函式閉包裝飾器
x 2222 print x def func1 x 65842 deffunc2 x 65412 print x func2 func1 print x 2222 65412 2222 global 呼叫全域性變數 x 8888 deffunc1 deffunc2 global x x 10000...
閉包 裝飾器
外部函式返回內部函式的引用 內部函式可以直接使用外部函式的環境變數 語法 外部函式通過返回內部函式的引用 內部函式可以直接使用外部函式的 環境變數 自由變數 函式執行時間統計 執行函式前預備處理 執行函式後清理功能 許可權校驗等場景 快取有且只有乙個引數 指向了被裝飾的函式的引用 使用裝飾器 裝飾器...