2015-01-06 19 views
5

Da dove viene la variabile __spec__?Python3: Perché funziona __spec__?

$ brew install python3 
$ python3 
Python 3.4.2 (default, Jan 5 2015, 11:57:21) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 

# Under Python 2.7.x this gives a NameError 
>>> None is __spec__ 
True 
+0

http://bugs.python.org/issue19697 ha più informazioni implementazione nel caso in cui qualcuno è interessato – pzrq

risposta

5

Da the Python Language Reference, Part 5: The Import System (sottolineatura mia):

L'attributo __spec__ deve essere impostato alla specifica modulo utilizzato durante l'importazione del modulo. Questo è usato principalmente per l'introspezione e durante il ricaricamento. L'impostazione __spec__ si applica ugualmente a modules initialized during interpreter startup. L'unica eccezione è __main__, dove __spec__ è impostato su Nessuno in alcuni casi.

Novità nella versione 3.4.

1

Secondo Python 3 docs, __spec__ è sempre None se si sta utilizzando promt interattivo:

Quando Python viene avviato con l'opzione -m, __spec__ è impostato al modulo specifiche della modulo o pacchetto corrispondente. __spec__ è anche popolato quando il modulo __main__ viene caricato come parte dell'esecuzione di una directory , zipfile o altra voce sys.path.

Negli altri casi __main__.__spec__è impostato su Nessuno, come il codice utilizzato per compilare il __main__ non corrisponde direttamente con un modulo importabile:

  • interattiva pronta
  • -c switch
  • in esecuzione dallo stdin
  • eseguito direttamente da un file di origine o bytecode