如何从Python命令行找到函数定义所在的文件
假设我想了解一下Python中的import
语句。那我该怎么做呢?我想从Python命令行找到import
这个语句是在哪个文件里定义的。注意,我是在Windows 7上使用Python 2.7.6(iPython)。
对于大多数对象,直接输入对象的名字就可以了。例如:
import os
os
这样会得到以下结果:
<module 'os' from 'C:\Anaconda\lib\os.pyc'>
但是对于一些基本命令,比如import
,你就不能这样做了。
我试着在我的Python文件夹里搜索,但没想到找不到像C:\Anaconda\lib\import.py
这么简单的路径。有没有什么简单的方法可以找到这些语句是在哪里定义的呢?我知道很多时候它们是在C语言代码里,但我就是想找这个。
更新(2014年5月27日)
看起来大家觉得用内置命令没有简单的方法来做到这一点。不过,如果这事关生死,你可以在Python里写一个不太优雅的grep类型的函数来实现吧?
2 个回答
0
当你在导入了 os
之后调用它时,它会打印出文件的 路径,因为它是一个 模块。而 import
是一个语句:
>>> import math
>>> math
<module 'math' from '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/math.so'>
>>> import
File "<stdin>", line 1
import
^
SyntaxError: invalid syntax
>>>
如果你想知道的话,这里还有其他一些 语句,在空着的时候调用也会做类似的事情:
>>> with
File "<stdin>", line 1
with
^
SyntaxError: invalid syntax
>>> yield
File "<stdin>", line 1
SyntaxError: 'yield' outside function
>>> return
File "<stdin>", line 1
SyntaxError: 'return' outside function
>>> continue
File "<stdin>", line 1
SyntaxError: 'continue' not properly in loop
>>> import
File "<stdin>", line 1
import
^
SyntaxError: invalid syntax
>>> raise
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: exceptions must be old-style classes or derived from BaseException, not NoneType
>>> assert
File "<stdin>", line 1
assert
^
SyntaxError: invalid syntax
>>> del
File "<stdin>", line 1
del
^
SyntaxError: invalid syntax
>>> break
File "<stdin>", line 1
SyntaxError: 'break' outside loop
>>>
1
import
不是像 os
那样的一个 模块
。相反,它是一个 语句
。
https://docs.python.org/2/reference/simple_stmts.html#import