我在导入foo.py后调用了这个函数。 Foo有几种方法需要我打电话给foo.paint,foo.draw:如何迭代模块的功能
import foo
code
if foo:
getattr(foo, 'paint')()
我需要通过所有功能foo.paint使用while循环调用和迭代,foo.draw等我怎么做呢?
我在导入foo.py后调用了这个函数。 Foo有几种方法需要我打电话给foo.paint,foo.draw:如何迭代模块的功能
import foo
code
if foo:
getattr(foo, 'paint')()
我需要通过所有功能foo.paint使用while循环调用和迭代,foo.draw等我怎么做呢?
您可以使用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',
...]
@BiRico但这些是_module_的方法。 –
@wakamdr它为你工作? –
对python来说是个新东西,对于如何实现这个有点困惑:[f for _,f in foo .__ dict __。iteritems()if callable(f)]。我得到AttributeError:'dict'对象没有属性'iteritems' – wakamdr
我不认为这是一个重复。在这个问题上,OP只需要信息,在这一个他实际上想要调用的功能。 –