簡體   English   中英

Python-將函數作為參數傳遞給另一個函數

[英]Python - passing a function as an argument to another function

我有兩個文件;

  1. 第一個文件myProgram.py是具有許多功能的python文件
    其中包含的函數之一是myFunction該函數將與

     import myProgram myProgram.thisFunction() myProgram.thatFunction() 
  2. 第二個文件包含一個菜單系統,其中包含對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM