如何遍历模块的功能

lov*_*sus 10 python functional-programming getattr

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

import foo

code

if foo:
    getattr(foo, 'paint')()
Run Code Online (Sandbox Code Playgroud)

我需要使用while循环来调用和遍历所有函数foo.paint,foo.draw等.我该怎么做呢?

Pau*_* Bu 25

你可以这样使用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
Run Code Online (Sandbox Code Playgroud)

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

获得函数的更优雅(功能)方式是:

[f for _, f in foo.__dict__.iteritems() if callable(f)]
Run Code Online (Sandbox Code Playgroud)

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

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

  • @wakamdr似乎你在使用Python 3,试试`__dict __.items()` (3认同)