파이썬 기초 문법을 다 익혔다면
파이썬 내부 동작하는 구조와 파이썬만의 독특한 특징을 이해할 필요가 있다.
.
.
해당 포스팅은 [클린코드, 이제는 파이썬이다] 저서의 일부입니다.
256 is 256 == True but 257 is 257 == False
아주 기이한 현상이다.
파이썬은 value 비교를 == 연산자를 통해, id 비교를 is 연산자를 통해 한다.
물론 id()를 통해 value 비교로 == 연산자를 활용하면 id 비교가 가능하다.
파이썬은 모든 프로그램이 시작할 때
자주 쓰이는 정수 리터럴 객체를 미리 생성한다.
-5 부터 256까지가 그 범위이다.
CPython 인터프린터가 자동으로 -5에서 256까지의 객체를 미리 생성하고 시작한다.
그래서 다음과 같은 결과가 나오기도 한다.
>>> a = 256
>>> b = 256
>>> a is b
True
>>> c = 257
>>> d = 257
>>> c is d
False
문자열 인터닝 Interning
문자열 리터럴을 표현하기 위해 파이썬은 내부에서 객체를 재사용한다.
>>> spam = 'spam'
>>> ham = 'spam'
>>> spam is ham
True
>>> id(spam) == id(ham)
True
위와 같이 spam과 ham에 같은 문자열 리터럴을 할당했다.
그리고 두 변수의 id는 동일하다.
이를 문자열 인터닝이라 하며, CPython 구현 세부 사항이다. 알아만 두자.
아무것도 없으면 True인 all()
all() 내장함수는 iterator 객체가 모두 True라면 True를 반환하고,
단 하나라도 False라면 False를 반환한다.
>>> a
[1, 2, 3, 4, 5]
>>> all([i > 1 for i in a])
False
>>> all([i > 0 for i in a])
True
하지만 iterator 객체가 아예 비어있다면? 마찬가지로 True로 반환된다는 점을 조심하자
>>> b = []
>>> all([i > 0 for i in b])
True
비어있는 리스트도 True로 반환된다.
논리적으로 어색하지만, 이를 염두해두고 예외 처리에 조심하자
int이면서 bool인 True, False
True와 False는 bool 값을 가지지만, 동시에 int이기도 하다.
True는 1을 나타내며, False는 0을 나타낸다.
>>> True == 1
True
>>> False == 0
True
>>> 5 * True
5
>>> 5 * False
0
>>> 'python'[True]
'y'
>>> 'python'[False]
'p'
이처럼 True와 False를 활용해도 연산을 하거나 인덱스 처리를 하는데 문제없다.
하지만 문제가 없을 뿐, 이를 실제 코드에서 작성하면 안된다.
if 조건을 통해 연산을 다르게 하는 것이 현명할 것이다.
'Python tech > 고급 파이썬 공부' 카테고리의 다른 글
파이썬 주석/독스트링에 대하여 (0) | 2023.04.30 |
---|---|
파이써닉한 함수 만들기 (0) | 2023.04.16 |
자주 실수하는 파이썬의 함정들 (0) | 2023.03.25 |
파이썬 용어/개념 정리부터 확실하게 #2 (0) | 2023.03.16 |
파이썬 용어/개념 정리부터 확실하게 #1 (0) | 2023.03.15 |