在實際使用中,我們有時希望將函式作為引數傳遞給另乙個方法使用。
比如裝飾器實際就是函式呼叫函式
使用函式當做入參
那就可以把方法名a當做入參傳遞給方法b,呼叫的時候直接用【方法名()】來呼叫方法內容
>>> import time
>>> def run(func):
print (time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
func()
print (time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
>>> def test():
print("我是個測試檔案")
>>> run(test)
2019-05-10 11:46:53
我是個測試檔案
2019-05-10 11:46:53
使用函式當做入參,函式本身包含引數
如果要呼叫的方法a有引數怎麼辦呢?在定義b方法的時候,也將引數傳進去,然後呼叫方法的時候使用【方法名(引數1,引數2)】
#將方法名和引數都傳遞給呼叫的方法
>>> def run(func,a,b):
print (time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
func(a,b)
print (time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
>>> def plus(a,b):
print(a+b)
>>> run(plus,3,5)
2019-05-10 11:51:08
82019-05-10 11:51:08
使用函式當做入參,函式本身包含不確定個數的入參
如果要呼叫的方法的入參個數不確定,可以使用args或**args。但是一定要把args放到最後面
#有時候呼叫的方法的入參個數不確定,可使用*args表示。
#但是注意一定要把*args放到後面,因為run()也有可能入參
>>> def run(func,a,*args):
print (time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
print(a)
print(*args)
print (time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
>>> def plus(*args):
temp=0
for i in args:
temp=temp+i
print(temp)
>>> run(plus,100,1,2,3,4)
2019-05-10 11:55:14
1001 2 3 4
2019-05-10 11:55:14
>>>
把函式作為引數
在2.1小節中,我們講了高階函式的概念,並編寫了乙個簡單的高階函式:
def add(x, y, f):
return f(x) + f(y)
如果傳入abs作為引數f的值:
add(-5, 9, abs)
根據函式的定義,函式執行的**實際上是:
abs(-5) + abs(9)
由於引數 x, y 和 f 都可以任意傳入,如果 f 傳入其他函式,就可以得到不同的返回值。
任務利用add(x,y,f)函式,計算:
import math
def add(x, y, f):
return f(x) + f(y)
print add(25, 9, math.sqrt)
結果為8.0
參考: python把函式作為引數
在2.1小節中,我們講了高階函式的概念,並編寫了乙個簡單的高階函式 def add x,y,f return f x f y print add 5,9,abs 14根據函式的定義,函式執行的 實際上是 abs 5 abs 9 由於引數 x,y 和 f 都可以任意傳入,如果 f 傳入其他函式,就可以...
JS 把函式作為引數傳遞
昨天同事問了我乙個挺有意思的問題,就是js如何把函式當作引數傳進另乙個函式中執行,上網找了乙個並做乙個總結,目前我能理解並正常使用的兩種方法 方法一 func 方法名 str 引數 function test1 func,str else function test2 str 方法二 functio...
公開的函式把函式作為引數
公開的函式把函式作為引數 假設想公開把其它的函式作為引數的函式。最好的方法是用託付 delegate 考慮以下的樣例。定義了兩個函式,乙個是公開函式,還有乙個把函式公開為託付。module strangelights.demomoduleopen system a function that pro...