我有一个数字列表,我希望(例如)第一个术语和第二个术语,在导入的math
模块中执行每个函数。
import math
list = [1, 2, 3]
#do stuff that will print (for example) 2+1, 2-1, 2/1, etc.
答案 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.")