通过串联PYTHON运行功能

时间:2015-01-25 09:11:18

标签: python python-2.7

所以我要做的是使用这样的连接运行一个函数:

location = 1
"critter_" + location + "()"

我希望能运行'critter_1()'函数,但显然它不能像那样工作所以我尝试了几个东西,因为它给了我一个关于str to int concatenation错误的错误。所以我尝试的是:

location = 1
"critter_" + int(location) + "()"

它仍然没有用,所以我来这里问你们有没有办法真正做到这一点。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用globals()[function_name]来获取功能对象。获得函数对象后,将其称为普通名称。

func = globals()['critter_{}'.format(location)]
# OR  func = globals()['critter_' + str(location)]
func()

答案 1 :(得分:0)

您有两个不同的问题:

  1. 您需要获取该函数的正确名称,因此您需要将整数1转换为字符串' 1'。最简单的方法是使用funcname = "critter_"+str(location),但如果您使用字符串的format方法,则可以更好地控制转换的方式。 (你的int的含义几乎完全向后 - 它将转换为一个整数; str转换为字符串!)

  2. 您需要调用字符串给出的函数。为此,您可以使用许多不同的方法。最简单的可能只是致电eval(funcname+"()"),尽管这并不总是安全的。您还可以使用funcname在字典中查找存储所有全局定义函数globals()[funcname]的函数。

  3. 或者,您可以制作自己的列表或critter_n函数字典,并从中进行选择:

    critter_functions = {1: critter_1, 2: critter_2} #etc...
    # ...
    
    location = 1
    critter_functions[location]()