关于python:有没有办法迭代模块的所有功能?

Is there a way to interate through all the functions of a module?

我有一个数字列表,我希望(例如)第一个术语和第二个术语在导入的math模块中执行每个功能。

1
2
3
import math
list = [1, 2, 3]
#do stuff that will print (for example) 2+1, 2-1, 2/1, etc.


这是一个简单的方法。如果函数不需要两个参数,则需要指定将发生什么。

1
2
3
4
for name in dir(math):
    item = getattr(math, name)
    if callable(item):
        item(list[0], list[1])

基于@alex hall的答案,我想添加一个异常处理,以避免将两个参数传递给接受一个参数的函数。以下是更改后的代码:

1
2
3
4
5
6
7
8
for name in dir(math):
    item = getattr(math, name)
    if callable(item):
        try:
            item(list[0], list[1])
        # The function does not take two arguments or there is any other problem.
        except TypeError:
            print(item,"does not take two arguments.")


如果您有自己的数学模块,不要将其命名为"数学",因为Python已经有了一个标准的数学模块。将它命名为更独特的名称,以避免与Python数学模块混淆和可能的冲突。

其次,要从模块中获取函数列表,请查看python"inspect"模块->https://docs.python.org/2/library/inspect.html inspect.getmembers

1
2
3
4
5
import inspect
import myMathModule

for name, member in inspect.getmembers(myMathModule):
    print name, 'is function', inspect.isfunction(member)

您还可以检查函数参数,以确保它们接受say、两个参数或从列表中筛选出一个参数。但我认为在生产代码中使用这不是一个好主意。也许可以测试它是否可以工作,否则我将使用一个函数名列表,您将提取该列表,而不是模块中的任何函数。