迭代python中的不同函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代python中的不同函数相关的知识,希望对你有一定的参考价值。
我想迭代不同的函数。我已经研究了itertools,我没有发现任何相关的东西。我正在寻找这样的东西:
import mymod
import sys
mymodule= sys.module[__name__]
if __name__ == 'main':
function_list1=['mymod.f1','mymod.f1(keyword=True)','mymod.f2']
for func in function_list1:
try:
print(getattr(mymod,func)()) # problem: how do I call the keyword
except Exception, e:
print(e)
function_list2=['f1','f2']
for func in function_list2:
getattr(mymodule,func)()
我编辑了代码,因为我想明确表示我想从另一个模块和当前模块调用一个函数。我可能想要将一个关键字传递给该函数
模块mymod
是函数的集合,它导入了一些外部模块和我编写的一些模块,然后定义了只使用局部变量的函数
import sys
def f1(keyword=False, keyword2='something', keyword3=0.5):
a = 2
return a
答案
我想你正在寻找partial
type from functools
。在大多数情况下,您不需要它,因为函数是第一类对象。
from functools import partial
import mymod
if __name__ == '__main__':
# Functions from another module
function_list1 = [
mymod.f1, # partial(mymod.f1) will work, too.
partial(mymod.f1, keyword=True),
mymod.f2
]
for func in function_list1:
try:
print(func())
except Exception, e:
print(e)
# Functions from the current module
function_list2 = [f1, f2]
for func in function_list2:
func()
另一答案
使用本地或全局。
import mymod
if __name__ == 'main':
function_list=['mymod.f1','mymod.f2','mymod.f3']
for func in function_list:
try:
locals()[func]() # something here?
except Exception, e:
print(e)
要么
import mymod
if __name__ == 'main':
function_list=['mymod.f1','mymod.f2','mymod.f3']
for func in function_list:
try:
globals()[func]() # something here?
except Exception, e:
print(e)
这仅在函数位于同一模块中时才有效
此外,如评论中所述,如果您保存它们而不使用列表中的引号,则可以直接调用这些函数。
以上是关于迭代python中的不同函数的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]