2024-06-16 11:52:58 发布
网友
我希望能够在Python 2.7中执行以下操作:
for function in ['function1', 'function2', 'function3', 'function4']: some_dictionary [function] = function (an_argument)
然而,当我尝试这样做的时候,我就犯了一个错误。下面的代码执行我希望上面的代码执行的操作:
有没有一种更简洁的方法来编写后一个代码,类似于前一个?在
提前谢谢你
逻辑学
如果函数的名称是字符串,则可以使用locals()来访问它们:
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']()
打印:
for function in ['function1', 'function2', 'function3', 'function4']: some_dictionary[function] = function(an_argument)
这不起作用,因为列表中的项是字符串,您不能调用字符串。相反,将实际函数放入列表中。在
您也可以将函数本身用作键,这在某些情况下可能很有用(例如,您可以将函数的描述放在其docstring中,并使用它为用户打印一些好的内容,或者允许用户重试该函数,或其他):将函数引用保留为以后使用要简单得多,换句话说,不是试图从函数名中获取它。在
for function in [function1, function2, function3, function4]: some_dictionary[function] = function(an_argument)
您可以使用func_name:
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}
在这里使用lambda,所以所有的东西都是名称<lambda>,但是使用适当的函数,它们的func_name将反映它们的变量名。在
<lambda>
如果函数的名称是字符串,则可以使用
locals()
来访问它们:打印:
^{pr2}$这不起作用,因为列表中的项是字符串,您不能调用字符串。相反,将实际函数放入列表中。在
^{pr2}$您也可以将函数本身用作键,这在某些情况下可能很有用(例如,您可以将函数的描述放在其docstring中,并使用它为用户打印一些好的内容,或者允许用户重试该函数,或其他):将函数引用保留为以后使用要简单得多,换句话说,不是试图从函数名中获取它。在
您可以使用
func_name
:在这里使用lambda,所以所有的东西都是名称
<lambda>
,但是使用适当的函数,它们的func_name
将反映它们的变量名。在相关问题 更多 >
编程相关推荐