如何使用函数作为参数来创建函数

时间:2015-05-25 10:18:31

标签: python function

这是我定义的功能:

import sys

def hello():
    print("hello")

class parser():

    def parseSubcommand(self, name, function):
        if name == sys.argv[1]:
            result = function()
            return(result)


    def findArgument(self, name, function):
        print("dummy") #not started working on findArgument yet

但是当我试着这样称呼它时:

parser().parseSubcommand(name="hello", function="hello")

我收到了错误

  

function()TypeError:' str'对象不可调用

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

def function1():
    return 'hello world'

def function2(function_to_run):
    result = function_to_run()
    return result

function2(function1)

答案 1 :(得分:1)

您需要将函数映射到其名称的字符串表示形式:

def hello():
    print("hello")

class parser():    
    funcs = {"hello": hello}
    def parseSubcommand(self, name):
         return self.funcs.get(name,lambda: print("Invalid name"))()



parser().parseSubcommand(name="hello")
parser().parseSubcommand(name="foo")
hello
Invalid name

如果您使用sys.argv[1],那么您将需要,因为您将始终获得字符串。

如果你想使用argparse为python3或optaprse为python2采取args可能是一个更好的主意。

答案 2 :(得分:1)

hello"hello"

不同

"hello"是一个只能用作字符串的字符串。它不能引用变量,除非用作访问特定引用的字典键。

您想使用hello,因为它是您的功能的实际名称。变量名永远不会被字符串访问。

parser().parseSubcommand(name="hello", function=hello)

如果需要将函数名称作为字符串传递,则需要在字典中引用它们,如下所示:

functionNames = {"hello":hello}