在python中,函式也是物件。所以函式是可以被引用的,也可以作為引數傳入函式(想想裝飾器),話不多說,上例子。(例子**於《python核心程式設計第二版》)
例1.使用別名呼叫
def
foo():
print('in foo()')
bar = foo # 對函式物件新建乙個引用
>>>bar()
in foo()
在上述**中,把foo
賦值給bar
,此時bar
和foo
引用了同乙個函式物件,所以可以使用bar()
的形式呼叫foo()
。此處要注意foo
和foo()
的區別,前者是函式的引用,後者是函式的呼叫,因此在裝飾器中巢狀內返回的是函式的呼叫,而外層返回的是函式的引用。(此處插入一例)
例2.裝飾器內外層返回值的差別
def
dec(func):
def(*args,**kwargs):
do something...
return func(*args,**kwargs) # 此處若返回引用,則被裝飾函式不執行
在上例中,內層返回的是函式的呼叫,故可在實現裝飾器功能後完成被裝飾函式的呼叫,若內層返回的是func,則被裝飾函式不呼叫。
回到正題,函式仍可以作為引數傳入其他函式進行呼叫:
例3.函式作為其他函式的引數
def
bar(argfunc):
argfunc()
>>>bar(foo)
in foo()
在上例中,將foo()
函式的引用作為引數傳入bar()
中,成功實現了foo()
的功能。
現在看乙個實際的例子:
例4.傳遞和呼叫函式
def
convert
(func,seq):
'conv. sequence of numbers to same type'
return [func(eachnum) for eachnum in seq]
myseq = (123,45.67,-6.2e8,999999999l)
print (convert(int,myseq)) # [123,45,-62000000,999999999]
print (convert(long,myseq)) # [123l,45l,-62000000l,999999999l]
print (convert(float,myseq)) # [123.0,45.67,-62000000.0,999999999.0]
總的來說,python的函式比較靈活,使用時有很多技巧。 如何傳遞函式
摘自 非同步 庫提供了一些函式,這些函式使您可以在元件之間傳遞訊息。這些訊息傳遞函式與各種訊息塊型別一起使用。有關併發執行時所定義的訊息塊型別的更多資訊,請參見非同步訊息塊。各節內容 本主題描述以下訊息傳遞函式 send 和 asend concurrency send 函式一條訊息傳送到指定目標同...
c 傳遞函式引數
傳遞普通函式和類的成員函式方式不同,原因是傳遞函式引數實際傳的是函式的位址,但是普通函式和成員函式的位址獲取方式不太相同。普通函式只要傳遞乙個函式名稱即可,但是成員函式在類的內部中沒有位址,選擇乙個成員函式就意味著得知道該函式在類中的偏移量,因此需要知道該物件和對應的偏移量,才能得到真實的位址。當然...
matlab傳遞函式構建函式tf
基本用法 tf num,den 其中num為分子的係數陣列,den為分母的係數陣列,都是按照自變數的冪進行降序排列,輸出為tf型別的連續時間傳遞函式 舉例 num 0 1224020 den 2 4622 tf num,den ans 12 s 3 24 s 2 20 2 s 4 4 s 3 6 s...