2 ** 10 # 10242 ** 0.5 # 1.4142135623730951pow(2, 10, 1000) # 24 (modular exponentiation)# 행렬곱 (PEP 465, 3.5+)import numpy as npA @ B # np.matmul(A, B)
비교 연산: 체이닝과 함정
Python 비교는 수학식처럼 체이닝된다.
python
x = 5print(0 < x < 10) # True (C: 0 < x then result < 10이라 망함)print(1 == 1 == 1) # Trueprint(1 < 2 > 1) # Trueprint(1 < 2 < 1) # False (단축 평가)
결과
TrueTrueTrueFalse
체이닝은 and로 묶인 것과 동등. 0 < x < 10 == 0 < x and x < 10. 가운데 표현식은 한 번만 평가.
== vs is
==
is
의미
값(value) 동등
동일(identity, 같은 객체)
호출
__eq__()
id 비교 (id(a) == id(b))
사용
일반 비교
None, True, False, singleton 비교
a = [1, 2, 3]b = [1, 2, 3]print(a == b) # True (값)print(a is b) # False (다른 객체)x = Noneprint(x is None) # 권장print(x == None) # 비권장 (NumPy 같은 객체에선 위험)
작은 정수 캐싱(-5~256) 때문에 a is b가 우연히 True가 될 수 있다. 의존하지 말 것.
멤버십 연산
in은 컨테이너의 __contains__를 호출, 없으면 iteration으로 폴백.
1 in [1, 2, 3] # True - list: O(n)"a" in {"a", "b"} # True - set: O(1)"key" in {"key": 1} # True - dict: O(1) (키 검사)"ell" in "hello" # True - str: 부분 문자열 검사
큰 list에 반복 멤버십 검사가 필요하면 set으로 변환.
논리 연산: short-circuit
a and b # a가 falsy면 a, 아니면 ba or b # a가 truthy면 a, 아니면 bnot a # bool 반환# 활용default = user_input or "anonymous"log = logger and logger.info("msg")result = check() and process()
bool을 반환하지 않고 피연산자 그대로 반환하는 점에 주의(다른 언어와 다름).
비트 연산
a = 0b1100 # 12b = 0b1010 # 10a & b # 0b1000 = 8a | b # 0b1110 = 14a ^ b # 0b0110 = 6~a # -13 (=-(a+1))a << 2 # 48b >> 1 # 5
Python int는 임의 정밀도 2의 보수 모델로 비트 연산이 안전.
비트 트릭
# 짝/홀n & 1 # 1이면 홀수# 비트 카운트 (3.10+)n.bit_count()# 비트 길이(255).bit_length() # 8# 부호 반전 없이 최하위 1비트n & -n # 가장 낮은 set 비트 추출
함수 인자가 list일 때 xs += [...]와 xs = xs + [...]가 호출자에게 다르게 보인다.
워러스 연산자 := (3.8+)
표현식 자리에서 할당. while 입력 반복이나 컴프리헨션 내 재사용에 유용.
# Beforewhile True: line = input() if not line: break process(line)# Afterwhile line := input(): process(line)# 컴프리헨션results = [y for x in data if (y := f(x)) is not None]
우선순위 요약 (높음 → 낮음)
(), [], {} # 괄호, 리터럴x[i], x(args) # 인덱싱, 호출** # 거듭제곱 (우결합)+x -x ~x # 단항* / // % @ # 곱셈류+ - # 덧셈류<< >> # 비트 시프트& # AND^ # XOR| # ORin not in is is not < <= > >= != == # 비교/멤버십/동일성not # 논리 NOTand # 논리 ANDor # 논리 ORif ... else # 조건식lambda # 람다:= # 워러스
💬 댓글