首先,什麼是函式修飾符?函式修飾符就是對原有函式做一層包裝。比如有以下兩個函式:
def func1():
print 'i am function func1'
def func2():
print 'i am function func2'
現在我們想為這兩個函式增加一段共同的操作,這時就可以使用函式修飾符。
首先我們定義乙個修飾函式,先不做任何處理,僅僅列印一條橫線:
def de(f):
def _call_():
print '-------------------------------'
return f()
return _call_
使用這個修飾符:
@de
def func1():
print 'i am function func1'
@dedef func2():
print 'i am function func2'
if __name__ == '__main__':
func1()
func2()
執行結果為:
e:\開發文件2\python\demo>修飾符.py
i am function func1
i am function func2
可以看到,修飾符起作用了。
注意:
1.修飾符等價於包裝呼叫:
@dedef 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_
@dedef func1(lst1,lst2 ):
for item in lst1+lst2:
print item
@dedef func2( dic ):
for k, v in dic.items():
print k, v
if __name__ == '__main__':
func1( [1,2], [3,4] )
#func2( )
func2( [1,2])
這裡使用了可變引數*args和**kwargs,這樣會把所有接收來的引數,原樣不動的再轉給原函式,是慣用法。
以上程式執行結果:
e:\開發文件2\python\demo>修飾符帶引數.py
param type error
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,這個內層函式就是乙個閉包,其實可以也...