【问题标题】:python select a function based on the value in a dictionary [duplicate]python根据字典中的值选择一个函数[重复]
【发布时间】:2016-04-19 16:22:10
【问题描述】:

我想根据字典的值选择一个函数:

dict = {"func_selector":"func1", "param_value":"some_value"}

# defined a function
def func1(param):
  # some function code

现在,我想根据某个键的值来选择功能,这样它就可以实现如下:

# calling a function based on some dict value
dict["func_selector"](dict["param_value"])

语法可能是错误的,但我想知道是否可以在 Python 或类似的东西中做到这一点。

【问题讨论】:

  • 为什么不存储函数本身而不是字符串? dict = {"func_selector":func1, "param_value":"some_value"}

标签: python function python-3.x dictionary


【解决方案1】:

尝试将函数的值存储在字典中,而不是其名称:

def func1(param):
    print "func1, param=%r" % (param,)

d = {"func_selector":func1, "param_value": "some value"}

那么你可以说:

>>> d['func_selector'](d['param_value'])
func1, param='some value'

【讨论】:

  • OP 声明 Python 3,print 缺少括号
【解决方案2】:

IMO 最好的方法是这样做

def func1(param):
     #code

some_value = ... #The value you need
my_dict = {"func_selector": func1, "param_value": some_value }

然后

my_dict["func_selector"](my_dict["param_value"])

现在,如果你只有函数名,你需要调用getattr

然后叫它

getattr(my_class, my_dict["func_selector"])(my_dict["param_value"])

my_class 是包含该方法的类。如果不在课堂上我想你可以通过self

【讨论】:

  • self 没有在类之外定义,您可以改用locals()globals()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多