在Python中迭代函数

2024-06-16 11:52:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够在Python 2.7中执行以下操作:

    for function in ['function1', 'function2', 'function3', 'function4']:
        some_dictionary [function] = function (an_argument)

然而,当我尝试这样做的时候,我就犯了一个错误。下面的代码执行我希望上面的代码执行的操作:

^{pr2}$

有没有一种更简洁的方法来编写后一个代码,类似于前一个?在

提前谢谢你

逻辑学


Tags: 方法inanfordictionary错误functionsome
3条回答

如果函数的名称是字符串,则可以使用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']()

打印:

^{pr2}$
for function in ['function1', 'function2', 'function3', 'function4']:
    some_dictionary[function] = function(an_argument)

这不起作用,因为列表中的项是字符串,您不能调用字符串。相反,将实际函数放入列表中。在

^{pr2}$

您也可以将函数本身用作键,这在某些情况下可能很有用(例如,您可以将函数的描述放在其docstring中,并使用它为用户打印一些好的内容,或者允许用户重试该函数,或其他):将函数引用保留为以后使用要简单得多,换句话说,不是试图从函数名中获取它。在

for function in [function1, function2, function3, function4]:
    some_dictionary[function] = function(an_argument)

您可以使用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将反映它们的变量名。在

相关问题 更多 >