Python : __builtin__과 __builtins__의 차이점은 무엇입니까?
오늘 코딩을하다가 뭔가를 발견했습니다. 새 인터프리터 세션 (IDLE)을 열고 dir
함수로 정의 된 내용을 확인하면 다음과 같은 결과가 나타납니다.
$ python
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '_', '__debug__', '__doc__', '__import__', '__name__', '__package__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip']
>>> import __builtin__
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '_', '__debug__', '__doc__', '__import__', '__name__', '__package__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip']
>>> dir(__builtin__) == dir(__builtins__) # They seem to have the same things
True
마지막 줄에 유의하십시오.
그래서 제 질문은 :
다른 하나의 별칭입니까?
파이썬 사람들이 그것들 중 하나를 제거 할 계획입니까?
내 프로그램에 무엇을 사용해야합니까?
파이썬 3은 어떻습니까?
모든 정보는 소중합니다!
중대한:
Ubuntu에서 Python 2.7.2 이상을 사용하고 있습니다.
파이썬 문서에서 바로 : http://docs.python.org/reference/executionmodel.html
기본적으로
__main__
모듈에 있을 때__builtins__
내장 모듈입니다__builtin__
(참고 : 's'없음). 다른 모듈에서는 모듈 자체__builtins__
의 사전에 대한 별칭입니다__builtin__
.
__builtins__
제한된 실행의 약한 형태를 만들기 위해 사용자가 만든 사전으로 설정할 수 있습니다.CPython 구현 세부 사항 : 사용자는 만져서는 안됩니다
__builtins__
. 엄격하게 구현 세부 사항입니다. 내장 네임 스페이스의 값을 재정의하려는 사용자import
는__builtin__
( 's'없음) 모듈을 사용하고 해당 속성을 적절하게 수정해야합니다. 모듈의 네임 스페이스는 모듈을 처음 가져올 때 자동으로 생성됩니다.
Python3에서는 이러한 혼동을 피하기 위해 모듈의 __builtin__
이름이로 변경되었습니다 builtins
.
CPython의 구현 세부 사항 __builtin__
이기 때문에 프로그램에서 사용해야 합니다 (드물게 필요한 경우) __builtins__
. 그것도 동일 할 수있다 __builtin__
, 또는에 __builtin__.__dict__
상황에 따라. 로 설명서를 말한다 :
대부분의 모듈에는
__builtins__
전역의 일부로 사용할 수 있는 이름 ( 's'참고)이 있습니다. 의 값__builtins__
은 일반적으로이 모듈 또는이 모듈의__dict__
속성 값입니다 . 이것은 구현 세부 사항이므로 Python의 대체 구현에서 사용되지 않을 수 있습니다.
파이썬 3 년 __builtin__
에 이름이 변경되었습니다 builtins
, 그리고 __builtins__
같은 (만 사용해야하므로 남아 builtins
파이썬 3).
귀도는 여기에서 볼 수 있듯이과 ( " 와 둘 다 가지는 것은 분명히 나쁜 생각입니다.") __builtin__
와 단결하기를 원했지만 아무 것도 나오지 않았습니다.__builtins__
__builtins__
__builtin__
분명히의 사용은 __builtins__
성능을위한 것입니다. __builtin__.__dict__
메인이 아닌 모듈에서 사용할 때 직접 액세스 할 수 있으므로 한 수준의 간접 정보를 제거합니다.
__builtin__
내장 함수 및 유형을 포함하는 모듈입니다. __builtins__
동일한 것을 포함 하는 이름 을 사용할 수 있다는 사실 은 구현 세부 사항입니다. 즉, 그중 하나를 사용해야하는 경우을 수행 import __builtin__
한 다음 사용하십시오 __builtin__
. 설명서를 참조하십시오 .
다음 코드와 같이 이해할 수 있습니다. cpython이 시작되면 cpython은 __builtin__
모듈을 전역 네임 스페이스로 로드 합니다.
수입 __builtin__
등__builtins__
'ProgramingTip' 카테고리의 다른 글
WPF에서 "마우스 기지"란 무엇을 의미합니까? (0) | 2020.11.05 |
---|---|
gdb- 파이프 입력 (인수 아님)으로하지 (0) | 2020.11.05 |
목록에서 항목을 빠르게 제거하는 방법 (0) | 2020.11.05 |
일로 만 작업 할 때 "datetime.timedelta"와 "dateutil.relativedelta.relativedelta"의 차이점은 무엇입니까? (0) | 2020.11.05 |
console.log () 또는 동기화? (0) | 2020.11.05 |