我在導入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只需要信息,在這一個他實際上想要調用的功能。 –