ProgramingTip

Python : __builtin__과 __builtins__의 차이점은 무엇입니까?

bestdevel 2020. 11. 5. 08:18
반응형

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__

참고 URL : https://stackoverflow.com/questions/11181519/python-whats-the-difference-between-builtin-and-builtins

반응형