2012-01-28 17 views

risposta

57

Il modulo __builtin__ è stata rinominata in builtins python3.

Questo cambiamento risolve 2 fonti di confusione per lo sviluppatore Python medio.

  • E ''__builtins__' o '__builtin__' che è nel namespace globale? Darn s!
  • È __builtin__ a special method name o un modulo? Non posso dire tell.

Questa confusione deriva principalmente dalla violazione della convenzione pep8. Inoltre, la mancanza di pluralizzazione sul modulo ostacola anche la comunicazione. Entrambi questi sono notevolmente illustrati dalle lunghezze Guido deve andare a spiegare quanto segue da http://mail.python.org/pipermail/python-ideas/2009-March/003821.html:

[CPython] guarda le variabili globali, che contengono una speciale voce di magia __builtins__ (con una 's'), che è il dict in cui vengono cercate le funzioni integrate. Quando questo dict è lo stesso oggetto della predefinita built-in dict (che è __builtin__.__dict__ dove __builtin__ - senza 's' - è il modulo che definisca le funzioni built-in) dà si privilegi di supervisore; ...

Ad esempio,

Python2.7

>>> import __builtin__ 
>>> vars(globals()['__builtins__']) is vars(__builtin__) 
True 
>>> 

Python3.2

>>> import builtins 
>>> vars(globals()['__builtins__']) is vars(builtins) 
True 
>>> 

Risorse correlate:

Altre variazioni di nome - http://docs.pythonsprints.com/python3_porting/py-porting.html#name-changes

Per una breve spiegazione di come __builtins__ è utilizzato nella risoluzione dei nomi - __builtin__ module in Python

Problemi correlati