所以我要做的是使用这样的连接运行一个函数:
location = 1
"critter_" + location + "()"
我希望能运行'critter_1()'函数,但显然它不能像那样工作所以我尝试了几个东西,因为它给了我一个关于str to int concatenation错误的错误。所以我尝试的是:
location = 1
"critter_" + int(location) + "()"
它仍然没有用,所以我来这里问你们有没有办法真正做到这一点。
有什么想法吗?谢谢!
答案 0 :(得分:2)
您可以使用globals()[function_name]
来获取功能对象。获得函数对象后,将其称为普通名称。
func = globals()['critter_{}'.format(location)]
# OR func = globals()['critter_' + str(location)]
func()
答案 1 :(得分:0)
您有两个不同的问题:
您需要获取该函数的正确名称,因此您需要将整数1转换为字符串' 1'。最简单的方法是使用funcname = "critter_"+str(location)
,但如果您使用字符串的format
方法,则可以更好地控制转换的方式。 (你的int
的含义几乎完全向后 - 它将转换为一个整数; str
转换为字符串!)
您需要调用字符串给出的函数。为此,您可以使用许多不同的方法。最简单的可能只是致电eval(funcname+"()")
,尽管这并不总是安全的。您还可以使用funcname
在字典中查找存储所有全局定义函数globals()[funcname]
的函数。
或者,您可以制作自己的列表或critter_n
函数字典,并从中进行选择:
critter_functions = {1: critter_1, 2: critter_2} #etc...
# ...
location = 1
critter_functions[location]()