在python中迭代不同的函数
我想迭代不同的函数。我研究过itertools,但没有发现任何与之相关的东西。 我在找这样的东西:在python中迭代不同的函数,python,python-2.7,iterator,Python,Python 2.7,Iterator,我想迭代不同的函数。我研究过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:
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
使用局部或全局
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:
locals()[func]() # something here?
except Exception, e:
print(e)
或
这仅在函数位于同一模块中时才起作用
此外,如注释中所述,如果保存函数而不使用列表中的倒逗号,则可以直接调用这些函数 我想你是在找那个。在大多数情况下,您不需要它,因为函数是一级对象
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()
我想你是在找那个。在大多数情况下,您不需要它,因为函数是一级对象
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()
同一模块中@Wondercricket how I call function的可能重复项?
'mymod.f1'
不是函数(它是字符串)mymod.f1
可能是一个函数,我们无法从您在此处发布的内容判断。只要去掉这些单引号,并在实际调用中使用func()
,您的代码就可以正常工作。@jasonharper您是对的,但我有时也想传递关键字--我编辑了我的问题@Wondercricket how I call function在同一个模块中可能重复?mymod.f1'
不是一个函数(它是一个字符串)。mymod.f1
可能是一个函数,我们无法从您在此处发布的内容中看出。只需去掉那些单引号,然后使用func()
对于实际调用,可能允许您的代码工作。@jasonharper您是对的,但我有时也想传递关键字--我已经编辑了我的question@fakzan我已经编辑了我的问题,我也想传递关键字sometimes@simona你能和我们分享mymod吗,我想看看函数是如何定义的…它是一个200行文件,你想知道什么?只需显示mymod.f1、mymod.f2和mymod.f3的定义,我想看看它们是如何接受参数的。你可以将动态关键字传递给函数,但你必须将关键字列表重组为dict,这可能不值得。不过,为了解释我的想法,你做了一些事情g如下面所示。dict_with_funcs={“mymod.f1”:{“keyword”:True,“keyword2”:“notSomething”}dict_with_funcs包含要传递给mymod.f1的关键字的dict,然后只需mymod.f1(**dict_with_funcs[“mymod.f1”])@我已经编辑了我的问题,我也想传递关键词sometimes@simona你能和我们分享mymod吗?我想看看函数是如何定义的…这是一个200行的文件,你想知道什么?只需显示mymod.f1、mymod.f2和mymod.f3的定义,我想看看它们是如何接受参数的。你可以传递d将动态关键字转换为函数,但您必须将关键字列表重新构造为dict,这可能不值得。但是,为了解释我的想法,您可以执行以下操作。dict_with_funcs={“mymod.f1”:{“关键字”:True,“关键字2”:“notSomething”}dict_with_funcs包含要传递给mymod.f1的关键字的dict,然后只需mymod.f1(**dict_with_funcs[“mymod.f1”])