python修飾符是實現乙個函式巢狀的功能,比較以下兩個函式
# -*- coding:utf-8 -*-
def a(fn):
print 'a'
def d(st):
print "--------------------------------"
print st + 'd'#st在這個函式中的生命週期已經結束
return fn
def b(fn):
print 'b'
return fn
@a@b
def c(st):
print "********************************"
print st#這裡是執行b、a,同時定義c
#下面是連續執行c函式三次,無視修飾符。
print "test"
c('c')
輸出結果是:ba
test
********************************
c
# -*- coding:utf-8 -*-
def a(fn):
print 'a'
def d(st):
print "--------------------------------"
print st + 'd'#st在這個函式中的生命週期已經結束
return d
def b(fn):
print 'b'
return fn
@a@b
def c(st):
print "********************************"
print st#這裡是執行b、a,同時定義c
#下面是連續執行c函式三次,無視修飾符。
print "test"
c('c')
輸出結果是:ba
test
--------------------------------
cd以上執行結果的區別是因為返回的函式不一樣,返回的函式不一樣也就是說執行的函式不一樣,所以最終結果也會不一樣。
注意幾個規律:
返回乙個函式就是在執行函式
@後面的呼叫@下面的
把函式作為引數傳遞時,整個函式可以用換元的思想去看待,就很簡單了
另外注意:
儘管只有一次c('c')
但是在呼叫之前,b函式和a函式已經被先後執行,也就是說修飾符所在的函式c,兩個修飾符就有執行b函式和a函式的效果。
輸出「test」作為乙個醒目的標記。
最後在呼叫c('c')時,輸出結果到底是否是c函式的輸出結果,取決於修飾符@a最後是否會返回c函式,
如果@a最後返回c函式,那麼輸出結果就是c函式的輸出結果,
如果@a最後不返回c函式,而是返回d函式,那麼儘管呼叫了c函式,由於修飾符的存在,輸出結果卻是d函式的輸出結果。
也就是說,對於存在修飾符的函式c,對c呼叫的結果,取決於修飾符最終是否會返回該函式,如果返回c函式,則執行c,(上面第乙份**)
如果不返回c,返回d,則遮蔽c,執行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中的函式修飾符
首先,什麼是函式修飾符?函式修飾符就是對原有函式做一層包裝。比如有以下兩個函式 def func1 print i am function func1 def func2 print i am function func2 現在我們想為這兩個函式增加一段共同的操作,這時就可以使用函式修飾符。首先我們...