python中函数修饰符_python中的函数修饰符
首先,什么是函數修飾符?函數修飾符就是對原有函數做一層包裝。比如有以下兩個函數:
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'
@de
def 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.修飾符等價于包裝調用:
@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
if __name__ == '__main__':
func1( [1,2], [3,4] )
#func2( {1:'a',2:'b'})
func2( [1,2])
這里使用了可變參數*args和**kwargs,這樣會把所有接收來的參數,原樣不動的再轉給原函數,是慣用法。
以上程序運行結果:
E:\開發文檔2\python\demo>修飾符帶參數.py
1
2
3
4
param type error
總結
以上是生活随笔為你收集整理的python中函数修饰符_python中的函数修饰符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vim windows版本_大概是篇Vi
- 下一篇: vs 调试 无法加载自定义可视化工具_推