如何从Python命令行找到函数定义所在的文件

-2 投票
2 回答
3182 浏览
提问于 2025-04-18 07:09

假设我想了解一下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

撰写回答