python學習之傳遞函式

2021-08-21 18:44:11 字數 1541 閱讀 3501

在python中,函式也是物件。所以函式是可以被引用的,也可以作為引數傳入函式(想想裝飾器),話不多說,上例子。(例子**於《python核心程式設計第二版》)

例1.使用別名呼叫

def

foo():

print('in foo()')

bar = foo # 對函式物件新建乙個引用

>>>bar()

in foo()

在上述**中,把foo賦值給bar,此時barfoo引用了同乙個函式物件,所以可以使用bar()的形式呼叫foo()。此處要注意foofoo()的區別,前者是函式的引用,後者是函式的呼叫,因此在裝飾器中巢狀內返回的是函式的呼叫,而外層返回的是函式的引用。(此處插入一例)

例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...