2010-04-23 13 views
0

J'examine le module JSON de python 3.1, et je suis actuellement dans /Lib/json/scanner.py. Au sommet du fichier est la ligne suivante:"de _json import ..." - python

from _json import make_scanner as c_make_scanner 

Il y a cinq fichiers .py dans le répertoire du module: __init__ (deux avant et arrière underscores, il est mise en forme en gras), décodeur, encodeur, scanner et outil . Il n'y a pas de fichier appelé "json".

Ma question est la suivante: lors de l'importation, d'où vient exactement "make_scanner"?

Oui, je suis très nouveau sur Python!

Répondre

1

Il peut provenir d'un fichier ou il peut être intégré. Sous Windows, il semble être intégré.

Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import _json 
>>> _json.__file__ 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute '__file__' 

et il n'y a pas _json.pyd ou _json.dll au large.

Si vous voulez voir la source , avoir un fichier binaire sur votre machine ou non est sans importance - vous aurez besoin du SVN browser.

+0

Je reçois le même objet "module" n'a aucun attribut "__file__" "message. Est-ce que cela signifie qu'il n'y a aucun moyen de voir make_scanner? – GlenCrawford

5

Il vient d'un _json.pyd C-compilé (ou _json.so, etc., etc, selon la plate-forme) qui vit ailleurs sur le sys.path. Vous pouvez toujours savoir où cela se trouve dans votre installation Python spécifique en important le module vous-même et en regardant son __file__, par exemple:

>>> import _json 
>>> _json.__file__ 
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/_json.so' 

Comme vous le voyez, dans mon installation de Python 2.6, _json vient du lib-dynload sous-répertoire de lib/python2.6, et l'extension utilisée sur cette plate-forme est .so.