Moduł __builtin__
przemianowano builtins
w Python3.
Ta zmiana rozwiązuje dwa źródła nieporozumień dla przeciętnego programisty w Pythonie.
- Czy
'__builtins__'
lub '__builtin__'
że jest w globalnej przestrzeni nazw? Darn s!
- Czy
__builtin__
a special method name lub moduł? Nie mogę powiedzieć: .
To zamieszanie powstaje głównie z powodu naruszenia konwencji pep8. Również brak pluralizacji na module utrudnia również komunikację. Obie te są znacznie ilustrują długościach Guido musi przejść, aby wyjaśnić co następuje od http://mail.python.org/pipermail/python-ideas/2009-March/003821.html:
[CPython] patrzy na globalnych, które zawierają specjalną magiczną wpis __builtins__
(z „s”), który jest dyktować, gdzie są wyszukiwane wbudowane funkcje. Kiedy ten dict jest taki sam przedmiot jak domyślnie wbudowanym dict (co jest __builtin__.__dict__
gdzie __builtin__
- bez „s” - jest moduł określający wbudowanych funkcji) daje Ci uprawnieniami administratora; ...
Przykładowo
Python2.7
>>> import __builtin__
>>> vars(globals()['__builtins__']) is vars(__builtin__)
True
>>>
Python3.2
>>> import builtins
>>> vars(globals()['__builtins__']) is vars(builtins)
True
>>>
Powiązane zasoby:
Inne zmiany nazwy - http://docs.pythonsprints.com/python3_porting/py-porting.html#name-changes
Dla zwięzłe wyjaśnienie, w jaki jest używany w __builtins__
rozpoznawania nazw - __builtin__ module in Python