Вам необходимо создать пользовательскую функцию предиката , которая принимает как модули, так и функцию.В этом случае вы также сможете получить название всей функции, а затем, отфильтровав участников по необходимости, вы можете получить желаемый результат.
def get_members(module):
predicate = lambda x: inspect.ismodule or inspect.function
for x,y in inspect.getmembers(module, predicate):
try:
md = y.__module__
if md != "__main__":
yield (x, y.__name__, y.__module__)
except:
if inspect.ismodule(y):
yield (x, y.__name__)
Демо:
# test.py
import os
import pandas as pd
import numpy as np
from os.path import basename, join
from itertools import product
import inspect
import sys
def export(df, folder):
"""some export thing (not really important)"""
f = join(folder, "test.csv")
df.to_csv(f)
return f
def get_members(module):
predicate = lambda x: inspect.ismodule or inspect.function
for x,y in inspect.getmembers(module, predicate):
try:
md = y.__module__
if md != "__main__":
yield (x, y.__name__, y.__module__)
except:
if inspect.ismodule(y):
yield (x, y.__name__)
print(list(get_members(sys.modules[__name__])))
Выход:
~/Desktop$ python3 test.py
[('__builtins__', 'builtins'), ('basename', 'basename', 'posixpath'), ('inspect', 'inspect'), ('join', 'join', 'posixpath'), ('np', 'numpy'), ('os', 'os'), ('pd', 'pandas'), ('product', 'product', 'itertools'), ('sys', 'sys')]