例如,有os.path.walk, os.walk并假设另一个md.walk,并假设os是进口的但是md不是。我想要一个像
whereis('walk')
虽然可以返回os.path.walk, os.walk and md.walk.
或者如果很难知道有一个md.walk,如何获取导入的os.path.walk and os.walk?
好的,这很有趣,这是更新的解决方案。一些 Python 魔法,Python 2.7 的解决方案。欢迎任何改进。它的行为与任何其他导入类似 - 因此请小心将任何可执行代码包装在if name == "__main__"
.
import inspect
import pkgutil
import sys
def whereis_in_globals(fname):
return [m for m in sys.modules.itervalues()
if module_has_function(m, fname)]
def whereis_in_locals(fname):
modules = (__import__(module_name, globals(), locals(), [fname], -1)
for _, module_name, _ in pkgutil.walk_packages(path="."))
return [m for m in modules if module_has_function(m, fname)]
def module_has_function(m, fname):
return hasattr(m, fname) and inspect.isfunction(getattr(m, fname))
if __name__ == "__main__":
# these should never raise AttributeError
for m in whereis_in_locals('walk'):
m.walk
for m in whereis_in_globals('walk'):
m.walk
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)