Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中迭代不同的函数_Python_Python 2.7_Iterator - Fatal编程技术网

在python中迭代不同的函数

在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:

我想迭代不同的函数。我研究过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

使用局部或全局

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”])