如何列出 Python 模块的所有函数而忽略模块导入的函数?
How do I list all functions for a Python module ignoring functions the module imports?
我有一个 Python 模块 'something.py',我想获得我在此文件中编写的所有函数的列表。我已经按照 this SO post 解释了执行此操作的标准方法。
问题是我在 something.py 中有导入函数,所以在尝试列出我的函数时,我也列出了我不关心的导入函数。如何获得我在 something.py 中编写的函数列表?
import <modulename>
dir(modulename)
第二行代码将给出模块中存在的函数列表
例如:
import math
dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
您可以使用 dir(yourModule) return 属性列表:https://docs.python.org/3/library/functions.html#dir
getmembers()
函数包含导入函数,所以您需要更多。一种想法是检查函数的模块名称。
from inspect import getmembers, isfunction
import something
import sys
mod = something
funcs = [
f
for _, f in getmembers(mod, isfunction)
if f.__module__ == mod.__name__
]
for f in funcs:
print(f)
或者您可以改为使用此条件进行过滤:
if sys.modules[f.__module__] is mod
无论哪种方式,输出都是:
<function bar at 0x107fb05f0>
<function foo at 0x107f840e0>
我的 something
模块有这个:
import sys
from textwrap import dedent
fubb = 1
def foo():
pass
def bar():
pass
将 this answer--Find functions explicitly defined in a module 中的函数从 Python 2 更新到 3(即将 itervalues() 替换为 values():
def is_mod_function(mod, func):
' checks that func is a function defined in module mod '
return inspect.isfunction(func) and inspect.getmodule(func) == mod
def list_functions(mod):
' list of functions defined in module mod '
return [func.__name__ for func in mod.__dict__.values()
if is_mod_function(mod, func)]
用法
print(list_functions(something)) # Output: ['a1', 'b1']
文件main.py(主模块)
import inspect
import something # project module
def is_mod_function(mod, func):
return inspect.isfunction(func) and inspect.getmodule(func) == mod
def list_functions(mod):
return [func.__name__ for func in mod.__dict__.values()
if is_mod_function(mod, func)]
def list_functions1(mod):
return [func.__name__ for func in mod.__dict__.itervalues()
if is_mod_function(mod, func)]
# Get list of functions defined only in module something
print(list_functions(something))
文件something.py(某模块)
from textwrap import dedent
from math import sin, cos
import numpy as np
def a1():
pass
def b1():
pass
输出
['a1', 'b1'] # shows only the functions defined in something.py
我有一个 Python 模块 'something.py',我想获得我在此文件中编写的所有函数的列表。我已经按照 this SO post 解释了执行此操作的标准方法。
问题是我在 something.py 中有导入函数,所以在尝试列出我的函数时,我也列出了我不关心的导入函数。如何获得我在 something.py 中编写的函数列表?
import <modulename>
dir(modulename)
第二行代码将给出模块中存在的函数列表
例如:
import math
dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
您可以使用 dir(yourModule) return 属性列表:https://docs.python.org/3/library/functions.html#dir
getmembers()
函数包含导入函数,所以您需要更多。一种想法是检查函数的模块名称。
from inspect import getmembers, isfunction
import something
import sys
mod = something
funcs = [
f
for _, f in getmembers(mod, isfunction)
if f.__module__ == mod.__name__
]
for f in funcs:
print(f)
或者您可以改为使用此条件进行过滤:
if sys.modules[f.__module__] is mod
无论哪种方式,输出都是:
<function bar at 0x107fb05f0>
<function foo at 0x107f840e0>
我的 something
模块有这个:
import sys
from textwrap import dedent
fubb = 1
def foo():
pass
def bar():
pass
将 this answer--Find functions explicitly defined in a module 中的函数从 Python 2 更新到 3(即将 itervalues() 替换为 values():
def is_mod_function(mod, func):
' checks that func is a function defined in module mod '
return inspect.isfunction(func) and inspect.getmodule(func) == mod
def list_functions(mod):
' list of functions defined in module mod '
return [func.__name__ for func in mod.__dict__.values()
if is_mod_function(mod, func)]
用法
print(list_functions(something)) # Output: ['a1', 'b1']
文件main.py(主模块)
import inspect
import something # project module
def is_mod_function(mod, func):
return inspect.isfunction(func) and inspect.getmodule(func) == mod
def list_functions(mod):
return [func.__name__ for func in mod.__dict__.values()
if is_mod_function(mod, func)]
def list_functions1(mod):
return [func.__name__ for func in mod.__dict__.itervalues()
if is_mod_function(mod, func)]
# Get list of functions defined only in module something
print(list_functions(something))
文件something.py(某模块)
from textwrap import dedent
from math import sin, cos
import numpy as np
def a1():
pass
def b1():
pass
输出
['a1', 'b1'] # shows only the functions defined in something.py