如何遍历模块的功能

发布于 2021-01-29 16:56:40

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

import foo

code

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

我需要使用while循环来调用和遍历所有函数foo.paint,foo.draw等。我该如何处理?

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以这样使用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',
     ...]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看