这是我定义的功能:
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'对象不可调用
答案 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]
,那么您将需要,因为您将始终获得字符串。
答案 2 :(得分:1)
hello
与"hello"
"hello"
是一个只能用作字符串的字符串。它不能引用变量,除非用作访问特定引用的字典键。
您想使用hello
,因为它是您的功能的实际名称。变量名永远不会被字符串访问。
parser().parseSubcommand(name="hello", function=hello)
如果需要将函数名称作为字符串传递,则需要在字典中引用它们,如下所示:
functionNames = {"hello":hello}