创建一个将模块作为字符串并显示其中的所有函数的函数

时间:2017-01-22 18:13:17

标签: python

我在使用python 2.7.13(x64)的Windows 7(x64)上。我正在尝试创建一个函数来显示模块中的函数。这是我试过的。

from __future__ import division, absolute_import, print_function
# from sys import argv
# import sys
import importlib

def see(module_here):
    print("Functions in " + module_here + " module")
    importlib.import_module(module_here)
    a1 = dir(module_here)
    for i,v in enumerate(a1):
        print(str(i) + ") " + v)
see('sys')      

我没有在sys模块中获得所需的"打印功能'。相反,它是与字符串' sys'相关联的打印功能。如果我使用see('this_does_not_exist'),结果将是相同的。

如果有一些python用户/专家帮我修改代码,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

那是因为你打电话:

importlib.import_module(module_here)

但不对结果做任何事情。正确的代码应该是:

from __future__ import division, absolute_import, print_function
# from sys import argv
# import sys
import importlib

def see(module_here):
    print("Functions in " + module_here + " module")
    result = importlib.import_module(module_here)
    a1 = dir(result)
    for i,v in enumerate(a1):
        print(str(i) + ") " + v)
see('sys')

请注意,这将打印sys中的所有元素,而不仅仅是函数。您需要执行其他过滤才能仅打印功能。

您可以使用 - 如@Vincenzzzochi所说 - inspect.is_function来检查它是否是一个函数:

from __future__ import division, absolute_import, print_function
# from sys import argv
# import sys
import importlib
import inspect

def see(module_here):
    print("Functions in " + module_here + " module")
    result = importlib.import_module(module_here)
    a1 = dir(result)
    for i,v in enumerate(f for f in a1 if inspect.isfunction(f)):
        print(str(i) + ") " + v)
see('sys')