我希望能够在Python 2.7中执行以下操作:
for function in ['function1', 'function2', 'function3', 'function4']:
some_dictionary [function] = function (an_argument)
但是,当我尝试这样做时,错误会增加。以下代码执行我希望上层代码执行的操作:
some_dictionary ['function1'] = function1 (an_argument)
some_dictionary ['function2'] = function2 (an_argument)
some_dictionary ['function3'] = function3 (an_argument)
some_dictionary ['function4'] = function4 (an_argument)
是否有更紧凑的方式编写后一个代码,类似于前者?
提前致谢,
Logicum
答案 0 :(得分:5)
for function in ['function1', 'function2', 'function3', 'function4']:
some_dictionary[function] = function(an_argument)
这不会起作用,因为列表中的项目是字符串,您无法调用字符串。相反,将实际功能放在列表中。
for function in [function1, function2, function3, function4]:
some_dictionary[function.__name__] = function(an_argument)
您也可以将函数本身用作键,这在某些情况下很有用(例如,您可以在其文档字符串中放置函数的描述并使用它来为用户打印好的东西,或者您可以允许用户重试该函数,或者其他任何事情):保持函数引用以供以后使用要简单得多,换句话说,而不是尝试从函数名中获取它。
for function in [function1, function2, function3, function4]:
some_dictionary[function] = function(an_argument)
答案 1 :(得分:0)
您可以使用func_name
:
>>> a = lambda x: x + 1
>>> b = lambda y: y + 2
>>> c = lambda z: z + 3
>>> a.func_name = 'a'
>>> b.func_name = 'b'
>>> c.func_name = 'c'
>>> z = a, b, c
>>> d = {}
>>> for f in z:
... d[f.func_name] = f(10)
...
...
>>> d
{'a': 11, 'c': 13, 'b': 12}
在这里使用lambdas,所以一切都是名称<lambda>
,但是如果功能正常,他们的func_name
将反映他们的变量名称。
答案 2 :(得分:0)
如果您将函数的名称作为字符串,则可以使用locals()
来访问它们:
def function1():
print "in function1"
def function2():
print 'in function2'
some_dictionary = {}
for func in ['function1', 'function2']:
some_dictionary[func] = locals()[func]
print some_dictionary['function1']()
<强>打印:
in function1