[英]Python - passing a function as an argument to another function
我有兩個文件;
第一個文件myProgram.py
是具有許多功能的python文件
其中包含的函數之一是myFunction
該函數將與
import myProgram myProgram.thisFunction() myProgram.thatFunction()
第二個文件包含一個菜單系統,其中包含對myProgram.py
的函數的myProgram.py
我想根據傳遞給file2中函數的參數來調用特定函數
def file2_function(function):
myProgram.function
file2_function(thisFunction(x,y,z))
這實際上將創建myProgram.thisfunction(x,y,z)並執行它。
我想我可以使用一堆if / elif語句來做到這一點,例如:
def file2_function(function):
if function == 1:
myProgram.thisFunction
elif function == 2:
myProgram.thatFunction
雖然那樣可能會很麻煩,因為我已經在菜單系統中使用了很多if / elif / else語句。
有沒有更好的方法(或者if / elif路線是走的路?)
您可以創建一個字典,其中key是函數的名稱,value是函數本身。 簡短示例:
functions = { 'add' : lambda x,y : x + y, 'mult': lambda x,y : x * y, 'div' : lambda x,y : x / y, 'sub' : lambda x,y : x - y }
functions['add'](1,2) # returns 3
函數file2_function
的*args
表示要傳遞給調用它的函數的參數:
def func1(a):
print a
def file2_function(function,*args):
function(*args)
file2_function(func1,4)
#4
@aga給了您一個很好的提示。 當我編寫cli應用程序時,我通常會像這樣:
def func1():
pass
def func2():
pass
def func3():
pass
def func_caller(name):
func_dict = {
'func1': func1,
'func2': func2,
'func3': func3
}
try:
func_dict[name]()
except KeyError:
print "no such func"
或者,您有getattr
。 請參見以下代碼段:
>>> import sys
>>> getattr(sys,'exc_info')
<built-in function exc_info>
>>> getattr(sys,'exc_info')()
(None, None, None)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.