2014-05-21 48 views
-3

假设我想要探索Python中的import语句。如何从Python命令行中找到定义了import的文件?注意我正在使用Windows 7中的Python 2.7.6(iPython)。如何查找从Python命令行定义函数的文件

对于大多数对象,只需输入对象名就足够了。例如:

import os 
os 

产生如下:

<module 'os' from 'C:\Anaconda\lib\os.pyc'> 

但你不能做同样的类似import基本命令。

我已经尝试搜索我的Python文件夹,但不出所料,没有像C:\Anaconda\lib\import.py那样简单。有没有一种简单的方法来找出这些语句是在哪里定义的(我认识到很多时候它将在c代码中,但这就是我所追求的)?

更新(14年5月27日)

似乎人们认为它不能以任何简单的方式完成了一个内置的命令。但是,如果你的生活依赖于它,你可以在Python中写出一些不雅的grep类型的函数,不是吗?

+0

你不能。您使用的技巧适用于__modules__,但导入不是模块,而是一种声明。 – dano

+0

@dano你不可能,或者你不能按照我的方式尝试? – neuronet

+1

我相信'import'是用C实现的,所以你需要找到实际Python源代码的位置。但是,从Python 3.1开始,有一个'importlib'模块,它提供了一个纯Python的'import'实现:https://docs.python.org/3/library/importlib.html – dano

回答

1

import不是moduleos是的方式。相反,这是一个statement

https://docs.python.org/2/reference/simple_stmts.html#import

+0

所以我的方式不起作用,但有没有办法找到导入定义的文件?它是否在Python的C代码中,如果有的话,是否有办法从python命令行中找到位置? – neuronet

+0

你为什么想知道什么是上下文? (这可能会导致不同的建议。) – khampson

+0

我想追踪实现函数的源代码,以便我可以研究该语言的内容。这个例子实际上并不重要。它可以是“打印”或任何其他命令。 – neuronet

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 
>>> 
+0

是的,Ken是这么说的:最初的问题是如何从Python中找到这些语句的源代码?看起来很简单,因为我写的基本上需要在Python中构建一个grep功能。 – neuronet

相关问题