我有一个带有函数的Python模块:
== bar.py ==
def foo(): pass
== EOF ==
然后我将它导入全局命名空间,如下所示:
from bar import *
所以现在我可以使用函数foo
。如果我打印它:
print foo
口译员高兴地告诉我:
<function foo at 0xb7eef10c>
我是否有办法在此时发现该功能foo
来自模块bar
?
答案 0 :(得分:18)
foo.__module__
应该返回bar
如果您需要更多信息,可以从sys.modules['bar']
获取,__file__
和__package__
属性可能会很有趣。
答案 1 :(得分:2)
试试这个:
help(foo.func_name)
答案 2 :(得分:1)
而不是
from bar import *
使用
from bar import foo
使用from ... import *
语法是一种糟糕的编程风格,因为它很难知道命名空间的元素来自哪里。
答案 3 :(得分:0)
如果您有IPython,也可以使用?
:
In[16]: runfile?
Signature: runfile(filename, args=None, wdir=None, is_module=False, global_vars=None)
Docstring:
Run filename
args: command line arguments (string)
wdir: working directory
File: /Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_umd.py
Type: function
与__module__
比较:
In[17]: runfile.__module__
Out[17]: '_pydev_bundle.pydev_umd'