python中的函式修飾符

2021-09-12 05:16:37 字數 1859 閱讀 5810

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

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