使用inspect和importlib库,我们可以将所有函数保存在.py文件中。
import importlib
import inspect
my_mod = importlib.import_module("mymod")
all_functions = inspect.getmembers(my_mod, inspect.isfunction)
但是,列表all_functions
不仅包括模块中定义的功能,还包括导入模块的功能。
有没有办法区分它们?
答案 0 :(得分:0)
解决方案的关键是function_name.__module__
。考虑以下代码:
import a as module_to_check
print(
'checking module "{}"'
.format(module_to_check.__name__))
for attr in dir(module_to_check):
if callable(getattr(module_to_check, attr)):
print(
'function "{}" came from module "{}"'
.format(
getattr(module_to_check, attr).__name__,
getattr(module_to_check, attr).__module__))
输出为:
checking module "a"
function "a_2" came from module "a"
function "b_2" came from module "b"
a.py
是:
from b import b_1, b_2
a_1 = 1
def a_2():
pass
b.py
是:
b_1 = 1
def b_2():
pass