有没有办法通过模块的所有功能进行交互?

时间:2016-04-16 23:09:10

标签: python math module

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果您有自己的数学模块,请不要将其命名为" math"因为Python已经有一个标准的数学模块。将其命名为更独特的东西,以避免混淆并可能与Python数学模块发生冲突。

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

import inspect
import myMathModule

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

您还可以检查函数参数,以确保它们接受说明,两个参数或从列表中过滤掉一些参数。但我不认为在生产代码中使用这是一个好主意。也许测试一下你是否确定它会起作用,否则我会使用你将拉出的函数名列表而不是模块中的任何函数。

答案 2 :(得分:0)

基于@Alex Hall的答案,我想添加一个异常处理,以避免将两个参数传递给一个带有一个参数的函数。这是更改后的代码:

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.")