python閉包例項 使用通用裝飾器新增日誌功能

2021-10-20 15:14:51 字數 1534 閱讀 4865

'''

閉包的特殊用途:

可以在不修改現有功能原始碼的前提下,增加新的功能

'''import time

defwrite_log

(func)

:# 定義乙個記錄日誌的函式:將訪問事件以及訪問的函式名寫入到檔案中(log.txt)

try:

file

=open

('log.txt'

,'a'

, encoding=

'utf-8'

)file

.write(func.__name__)

# 寫入函式名

file

.write(

'\t'

)file

.write(time.asctime())

# 寫入時間

# time.asctime([t])轉換由 gmtime()或localtime()所返回的表示時間的元組或struct_time為以下形式的字串:

# 『sun jun 20 23:21:05 1993』。

# 如果未提供t,則會使用localtime()所返回的當前時間。

file

.write(

'\n'

)except exception as e:

print

(e)finally

:file

.close(

)def

func_out

(func)

:# 定義閉包函式。外部函式變數為func

deffunc_in

(*args,

**kwargs)

:# 內部函式中呼叫寫入日誌的函式。使用帶*的可變引數,靈活傳遞引數。」args」是個元組,』kwargs』是個字典

# 新增日誌功能

write_log(func)

# 呼叫外部函式的變數

func(

*args,

**kwargs)

return func_in # 返回內部函式名,注意無括號。有括號表示返回值,無括號表示函式

@ func_out

deffunc1()

:print

('功能1,無引數'

)@ func_out

deffunc2

(a):

print

(f'功能2,有乙個引數:'

)@ func_out

deffunc3

(a, b)

:print

(f'功能3,有兩個引數:和'

)func1(

)func2(

'李煥英'

)func3(

'晴明'

,'博雅'

python閉包詳解 例項演示

python閉包詳解 例項演示 閉包 這個詞語相信大多數學過程式設計的同學並不陌生,但是有時候理解起來還是有一定難度。先看定義 閉包是由函式和與其相關的引用環境組合而成的實體。比如參考資源中就有這樣的的定義 在實現深約束時,需要建立乙個能顯式表示引用環境的東西,並將它與相關的子程式 在一起,這樣 起...

python閉包的例項詳解

1 在外部函式中定義內部函式,內部函式包含訪問外部函式。即使外部函式的生命週期結束後,內部函式仍然可以訪問外部函式變數。2 外部函式的返回值是內部函式本身。def outer cheer hello def inner name return cheer name return inner if n...

python 閉包 python 閉包

閉包 因為python中函式也可以當作物件,所以如果出現當我們返回乙個函式,而該函式含有外部變數的時候就形成了閉包。閉包的特點 是個巢狀函式 可以獲得非區域性的變數 將函式當作物件返回 看乙個例子會更易理解 def make printer msg msg hi there def printer ...