Python 如何迭代模块';s函数

Python 如何迭代模块';s函数,python,functional-programming,getattr,Python,Functional Programming,Getattr,我在导入foo.py后调用了这个函数。Foo有几个方法需要调用,例如Foo.paint、Foo.draw: import foo code if foo: getattr(foo, 'paint')() 我需要使用while循环来调用和迭代所有函数foo.paint、foo.draw等。我该怎么做?您可以使用foo.\uuu dict\uuu如下: for name, val in foo.__dict__.iteritems(): # iterate through every

我在导入foo.py后调用了这个函数。Foo有几个方法需要调用,例如Foo.paint、Foo.draw:

import foo

code

if foo:
    getattr(foo, 'paint')()

我需要使用while循环来调用和迭代所有函数foo.paint、foo.draw等。我该怎么做?

您可以使用
foo.\uuu dict\uuu
如下:

for name, val in foo.__dict__.iteritems(): # iterate through every module's attributes
    if callable(val):                      # check if callable (normally functions)
        val()                              # call it
但请注意,这将执行模块中的每个函数(可调用)。如果某个特定函数收到任何参数,它将失败

获取函数的更优雅(功能性)方法是:

[f for _, f in foo.__dict__.iteritems() if callable(f)]
例如,这将列出
math
方法中的所有函数:

import math
[name for name, val in math.__dict__.iteritems() if callable(val)]
['pow',
 'fsum',
 'cosh',
 'ldexp',
 ...]

我不认为这是重复的。在这个问题上,OP只需要信息,在这个问题上,他实际上想要调用函数。作为python新手,我对如何实现这一点有点困惑:[f for,f In foo.\uu dict_u.iteritems()(如果可调用(f)]。我得到AttributeError:'dict'对象没有属性'iteritems'@wakamdr似乎您正在使用Python 3,请尝试使用
\uuu dict\uuu.items()