Python中的函式修飾符

2021-07-11 14:15:23 字數 2215 閱讀 5933

首先,什麼是函式修飾符?函式修飾符就是對原有函式做一層包裝。比如有以下兩個函式: 

複製**

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,這個內層函式就是乙個閉包,其實可以也...