Python 调用函数时如何使用变量?
基本上,我有很多函数都有相似的名称(Python 调用函数时如何使用变量?,python,function,variables,Python,Function,Variables,基本上,我有很多函数都有相似的名称(p1(),p2(),p3(),…,p20()),我不想手工调用它们。我想这样做: for i in range(1, 21): p{i}() 但这似乎不起作用。是否有其他方法解决此问题?函数可以像任何其他对象一样放入列表中,因此您可以构建函数列表,然后在其上迭代: p_funcs = [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p
p1()
,p2()
,p3()
,…
,p20()
),我不想手工调用它们。我想这样做:
for i in range(1, 21):
p{i}()
但这似乎不起作用。是否有其他方法解决此问题?函数可以像任何其他对象一样放入列表中,因此您可以构建函数列表,然后在其上迭代:
p_funcs = [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20]
for f in p_funcs:
f()
请注意,需要这样做可能表明,如果您将这些函数重构为数量较少的更复杂的函数,您的生活会更轻松。此函数基于
eval
cmd from
输出
testing function p1()
testing function p2()
一个潜在的解决方案是创建一种机制,在其中注册/存储函数,以便可以对它们进行迭代 下面是一个解决方案,它使用一个装饰器“注册”每个函数,并将它们存储在一个列表中,以便对它们进行迭代
registered_funcs = []
def register_func(f):
registered_funcs.append(f)
return f
@register_func
def p1():
print('p1')
@register_func
def p2():
print('p2')
for func in registered_funcs:
func()
您可以使用
globals()
来动态访问对象/变量(函数是对象/变量)。创建一个包含函数(如列表或dictSee)的数据结构可能更明智。TL;医生:不要。问:那么这两个函数之间的“关系”是什么呢?问:有一个函数指针的“集合”(例如数组或字典)有意义吗?问:将它们全部封装在一个类中,然后在一个类方法中集体调用它们是否有意义?您是否可以将其中一些函数作为示例的一部分?它们都很短吗?你曾经单独调用它们吗,或者它们总是作为一个单元调用(如果是这样,为什么它们首先是单独的函数)?有比(可能是危险的)eval函数更好的替代方法。@Ruperto-这是非常非常糟糕的建议。@palsm4我希望我知道为什么:)Ruperto:因为使用eval()
(或exec()
)本质上是一种安全隐患,通常是可以避免的。使用eval()调用一个我们知道是安全的函数是否足够安全?我不确定OP为什么对其函数的命名如此糟糕,或者他们是否试图做任何事情,但用糟糕的设计保存击键……但这是一个很好的解决方案。对于一个有疑问的问题;)
registered_funcs = []
def register_func(f):
registered_funcs.append(f)
return f
@register_func
def p1():
print('p1')
@register_func
def p2():
print('p2')
for func in registered_funcs:
func()