迭代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之路 模块,序列化,迭代器,生成器

python 3.6中的映射函数和迭代

为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]

python中的闭包,迭代器.

Lambda 作为 Python 中的迭代器在第一次迭代时返回函数对象

Python 中的 int 对象可以在函数内部变得可迭代吗?