2014-02-19 47 views
5

我在导入foo.py后调用了这个函数。 Foo有几种方法需要我打电话给foo.paint,foo.draw:如何迭代模块的功能

import foo 

code 

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

我需要通过所有功能foo.paint使用while循环调用和迭代,foo.draw等我怎么做呢?

+0

我不认为这是一个重复。在这个问题上,OP只需要信息,在这一个他实际上想要调用的功能。 –

回答

16

您可以使用foo.__dict__在某种程度上是这样的:

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', 
...] 
+0

@BiRico但这些是_module_的方法。 –

+0

@wakamdr它为你工作? –

+0

对python来说是个新东西,对于如何实现这个有点困惑:[f for _,f in foo .__ dict __。iteritems()if callable(f)]。我得到AttributeError:'dict'对象没有属性'iteritems' – wakamdr