首先,什麼是函式修飾符?函式修飾符就是對原有函式做一層包裝。比如有以下兩個函式:
複製**
def func1():
print 'i am function func1'
def func2():
print 'i am function func2'
現在我們想為這兩個函式增加一段共同的操作,這時就可以使用函式修飾符。首先我們定義乙個修飾函式,先不做任何處理,僅僅列印一條橫線:
複製**
def de( f )
def call_():
print '-------------------------------'
return f()
return _call_
使用這個修飾符:
複製**
def de( f ):
def _call_():
print '-------------------------------'
return f()
return _call
@de
def func1():
print 'i am function func1'
@de
def func2():
print 'i am function func2'
ifname= '__main__':
func1()
func2()
執行結果為:
複製**
d:\我的文件\桌面》b.py
-------------------------------
i am function func1
-------------------------------
i am function func2
d:\我的文件\桌面》
可以看到,修飾符起作用了。
注意:
1.修飾符等價於包裝呼叫:
@de
def func1:
----- 等價於 ------
func1 = de( func1 )
2.修飾函式必須返回乙個「可呼叫物件」:
def de( f ):
def call_():
return f()
return _call # 返回的是乙個函式體,而非呼叫_call_()
def func1( lst1, lst2 ):
# 合併兩個list,並列印各項
for item in lst1+lst2:
print item
def func2( dic ):
# 迴圈dict,列印各key-value
for k, v in dic.items():
print k, v
這兩個函式引數不同,又都沒有異常處理,現在我們想增加上,使用修飾符這樣處理:
import sys
import traceback
def de( f ):
def call_( *args, **kwargs ):
try:
return f( *args , **kwargs )
except:
print 'param type error'
return _call
@de
def func1( lst1, lst2 ):
for item in lst1+lst2:
print item
@de
def func2( dic ):
for k, v in dic.items():
print k, v
ifname= '__main__':
func1( [1,2], [3,4] )
func2( [1,2] )
這裡使用了可變引數*args和**kwargs,這樣會把所有接收來的引數,原樣不動的再轉給原函式,是慣用法。
以上程式執行結果:
複製**
d:\我的文件\桌面》b.py
1 2
3 4
param type error
d:\我的文件\桌面》
python中的函式修飾符
首先,什麼是函式修飾符?函式修飾符就是對原有函式做一層包裝。比如有以下兩個函式 def func1 print i am function func1 def func2 print i am function func2 現在我們想為這兩個函式增加一段共同的操作,這時就可以使用函式修飾符。首先我們...
python中的函式修飾符
首先,什麼是函式修飾符?函式修飾符就是對原有函式做一層包裝。比如有以下兩個函式 def func1 print i am function func1 def func2 print i am function func2 現在我們想為這兩個函式增加一段共同的操作,這時就可以使用函式修飾符。首先我們...
python 修飾符 python 修飾符
修飾符基礎 閉包 什麼是閉包呢?標準的概念大家可以看wikipedia上的解釋 舉個例子 def do add base def add increase return base increase return add do add函式裡巢狀了乙個內層函式add,這個內層函式就是乙個閉包,其實可以也...