Python의 미리 선언된 '상수' 6개는 모두 다르게 동작한다

Python's pre-declared constants are kinda weird

Python에는 True, False, None, __debug__, Ellipsis(또는 ...), NotImplemented라는 6개의 미리 선언된 '상수'가 있습니다. 그런데 이들은 각각 미묘하게 다른 방식으로 동작합니다. True, False, None은 키워드라서 식별자로 취급되지 않지만, __debug__는 일반 식별자임에도 할당이 금지된 유일한 이름입니다. Ellipsis와 NotImplemented는 실제로는 일반 내장(builtin)이어서 전역 변수로 가릴 수 있습니다. 또한 builtins 모듈의 속성을 변경하면 True, False, None, __debug__의 값은 바뀌지 않지만 Ellipsis와 NotImplemented는 바뀝니다. 이 글은 각 상수의 특이한 동작과 그 이유에 대한 궁금증을 탐구합니다.

그래서 어떤 의미에서 ...는 진짜 상수이지만 Ellipsis는 그렇지 않습니다. 이상하죠?
  1. Revanche1367

    파이썬의 많은 설계 결정들이 나에게는 이상하고 어긋나게 느껴졌지만, 오랫동안 그들은 그 작고 추한 설계 선택들이 바로 그 언어를 실제로 거의 아무도 사용하지 않는 더 잘 설계된 언어들보다 실용적이고 효과적으로 만드는 이유라고 정당화해 왔다. 나는 그것이 정말로 사실인지 명확히 말할 만큼 전문가는 아니지만, 내 생각에는 약간 이상하게 설계된 언어들이 엄청나게 인기를 얻는 반복적인 패턴이 있다: 파이썬, 자바스크립트, 아마도 C도. 아니면, 우리가 그 이상함을 알아차리는 것은 그 언어들이 너무 많이 사용되어 끝없이 까이기 때문일지도 모른다.

  2. jherskovic

    파이썬은 C 없이도 정말 대단한 라이브러리들을 가지고 있다. 웹 앱 개발을 좋아하지만 루비 온 레일즈와는 사랑에 빠지지 못한 우리에게 장고(Django)가 있다. 그리고 장고는 놀랍다. 또한 빠른 ETL 스크립트와 파이프라인을 작성하기에 더 나은 언어를 아직 본 적이 없다. 그리고 '시스템 관리 작업을 위한 스크립트가 필요한데 나중에 읽을 수 있기를 원하는' 경우에도 마찬가지다. 외부 지연 시간(웹, 데이터베이스 등)이 지배하는 모든 것은 파이썬에서 많은 용도에 충분히 빠를 것이다. 물론 웹 브라우저나 게임 엔진을 작성하기 위한 언어는 아니다. 그리고 느리다. 하지만 ML/데이터 과학 외에도 매우 강력한 틈새 시장이 있다. 개인적으로 나는 그것을 사랑한다. 각자 취향이 다르니까.

  3. zahlman

    과거: https://news.ycombinator.com/item?id=49284392 (내 댓글 포함), https://news.ycombinator.com/item?id=49250370. 이번에 주목받는 것을 보니 반갑다.

  4. nneonneo

    __debug__ 상수는 정말 이상하다. `if __debug__:`로 보호된 코드 블록은 PYTHONOPTIMIZE=1에서 바이트코드에서 완전히 생략된다. 이것과 `assert`는 파이썬에서 실제 '조건부 컴파일'의 유일한 두 가지 예이다. 이것이 또한 __debug__에 할당할 수 없는 이유이기도 하다. 그렇게 하면 `if __debug__:` 문에 대한 컴파일러의 가정을 무효화할 수 있게 되기 때문이다.

  5. neillyons

    초기 파이썬 버전에는 내장 True와 False가 없었다고 읽은 기억이 난다. 각 사용자가 직접 구현했었다. True = 1, False = 0. 나중에 이것들이 언어에 추가되었다. 파이썬 2에서는 여전히 재할당하고 교체할 수 있어서 'if False'가 실제로 참이 될 수 있었다! True, False = False, True. 파이썬 3에서는 더 이상 재할당할 수 없었다.

  6. gucci-on-fleek

    프리릴리즈 버전을 포함하면 실제로 사전 선언된 상수가 7개 있다. 파이썬 3.15(11월 출시 예정 [0])가 현재 Ellipsis와 NotImplemented처럼 동작해야 하는 새로운 상수 "TYPE_CHECKING"을 추가하기 때문이다 [1]. [0]: https://peps.python.org/pep-0790/#schedule [1]: https://peps.python.org/pep-0781/#backwards-compatibility

  7. hmokiguess

    파이썬은 끔찍하다. 라이브러리에 일회성 코드가 너무 많고, 스타일이 일치하지 않으며, 느리고, 잘못된 일을 하기가 너무 쉽다. 나는 종종 데이터 과학자들과 일하며 그들의 주피터 노트북을 프로덕션화해야 하는데, 그것은 순전히 최적화되지 않은 지옥이다. 연구/스크래치패드에는 배우기 쉬운 좋은 곡선일 것 같다.

  8. YuechenLi

    파이썬은 인기에도 불구하고 일반적으로 정말 이상한 언어라서, 나는 솔직히 프로그래밍을 시작하는 사람에게 일반적인 생각과는 달리 파이썬을 첫 언어로 선택하라고 추천할 수 없다. 내 말은, 나는 거의 10년 전에 대학원에 있을 때 내 분야의 다른 모든 사람들이 실험실 코드에 여전히 매트랩을 사용할 때 파이썬을 사용하기 시작한 첫 번째 사람 중 하나였다. 단순히 Numpy가 매트랩보다 덜 끔찍했고 PDF로 그래프를 쉽게 인쇄할 수 있는 무언가가 필요했기 때문이다. 오늘날 파이썬에 대해 좋게 말할 수 있는 유일한 점은 처음 5분 동안 시작하기 쉽고, 그 다음에는 모든 이상함을 처리해야 한다는 것이다: 유효 공백, 진실성, 덕 타이핑, GIL, 배포/패키징 등등. 나는 오랫동안 과학을 위한 파이썬의 잠재적 대체재로서 줄리아의 열렬한 팬이었고 이전에 그것을 많이 전파했지만, 최근에는 JIT/다중 디스패치가 이미 프로그래밍을 잘하는 방법을 아는 사람에게만 좋다는 확신이 점점 더 커지고 있다. 컴퓨터 과학이 아닌 많은 학자들에게는 꽤 끔찍한 코드를 작성한다. 파이썬을 완전히 건너뛰고 처음부터 정적으로 타입이 지정된 언어로 코드를 작성하는 것이 더 나을 수도 있다고 생각한다.

이 날의 다른 글

2026-08-25