如何解决如何列出Python模块的所有函数而忽略模块导入的函数?
我有一个Python模块“ something.py”,我想获得我在此文件中编写的所有函数的列表。我已经按照this的帖子解释了这样做的标准方法。
麻烦是我在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)返回属性列表: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(即,用values()替换itervalues():
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。