Is there a way to interate through all the functions of a module?
我有一个数字列表,我希望(例如)第一个术语和第二个术语在导入的
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、两个参数或从列表中筛选出一个参数。但我认为在生产代码中使用这不是一个好主意。也许可以测试它是否可以工作,否则我将使用一个函数名列表,您将提取该列表,而不是模块中的任何函数。