关于python:如何迭代模块的函数

How to iterate through a module's functions

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
import foo

code

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

我需要使用while循环来调用和迭代所有函数foo.paint、foo.draw等。我该如何进行呢?


您可以这样使用foo.__dict__

1
2
3
for name, val in foo.__dict__.iteritems(): # iterate through every module's attributes
    if callable(val):                      # check if callable (normally functions)
        val()                              # call it

但请注意,这将执行模块中的每个函数(可调用)。如果某个特定函数接收到任何参数,它将失败。

获得函数的一种更优雅(实用)的方法是:

1
[f for _, f in foo.__dict__.iteritems() if callable(f)]

例如,这将列出math方法中的所有函数:

1
2
3
4
5
6
7
import math
[name for name, val in math.__dict__.iteritems() if callable(val)]
['pow',
 'fsum',
 'cosh',
 'ldexp',
 ...]