Python語法糖 裝飾器

2021-07-04 12:25:40 字數 944 閱讀 5558

**:

這裡用來記錄python各種甜得發膩的語法糖,以及各種變形用法。

太初,神諭(pythonic),import light,於是有了光。

裝飾器是用來給函式增加新功能的,對於支援高階函式的語言,函式引數直接穿進去就好了。但是python提供了更為優雅的解決方案,只需要乙個@就能搞定。

裝飾器函式需要單獨寫出來,兩層,第一層接受乙個函式function就可以了,第二層構造乙個函式來接受function的引數然後再內部完成需要新增的功能並且正確呼叫函式,然後在第一層裡返回第二層構造的這個函式。例如寫好了乙個很蛋疼的**之後想測測時間……

# encoding: utf-8

import time

def timer(function):

def decorator(*args,**kwargs):

start=time.time()

return=function(*args,**kwargs)

print 'cost %s'%(time.time()-start)

return return

return decorator

@timer

def mul(row,column):

for i in xrange(row):

for j in xrange(column):

print i,j,i*j

if __name__=='__main__':

mul(100,100)

可以注意到這幾個問題:

快取是全域性有效的,這個字典會一直存在,以後再次呼叫也是一樣從裡面讀取資料。這也同樣帶來乙個問題,乙個快取裝飾器只能給乙個函式用,不然會混淆。

裝飾器是在每次呼叫這個函式的時候進入,對於測時間這種我只想要乙個最後結果的東西,是不是還是需要手動用另外乙個函式啟動遞迴然後裝飾這個函式?

Python語法糖 裝飾器

這裡用來記錄python各種甜得發膩的語法糖,以及各種變形用法。太初,神諭 pythonic import light,於是有了光。裝飾器是用來給函式增加新功能的,對於支援高階函式的語言,函式引數直接穿進去就好了。但是python提供了更為優雅的解決方案,只需要乙個 就能搞定。裝飾器函式需要單獨寫出...

Python裝飾器語法糖

裝飾器的固定格式 普通版本 def timer func def inner args,kwargs 執行函式之前要做的 ret func args,kwargs 執行函式之後要做的 return ret return inner wraps版本 from functools import wrap...

Python裝飾器(語法糖)

todo make an order defordering 第一驗證 驗證是否登入 第二驗證 驗證是否具有許可權 print 正在下訂單 todo change password defchangepwd 第一驗證 驗證是否登入 第二驗證 驗證是否具有許可權 print 修改密碼 todo sho...