CPython: bytes.hex(bytes_per_sep) 허용 범위가 커졌다 — sys.maxsize도 이제 OK(gh-147944) meta_description: Python 3.15에서 bytes.hex/bytearray.hex/memoryview.hex 및 binascii.b2a_hex의 bytes_per_sep 인자 허용 범위가 확대되어 sys.maxsize와 -sys.maxsize가 유효해졌다(gh-147944). 겉보기엔 테스트 한 줄 바뀐 수준이지만, 실제로는 Argument Clinic 변환(int→Py_ssize_t)과 정수 변환 경로가 정리되면서 “경계값에서의 Overflow/TypeError”가 더 일관되게 동작한다. 이 글은 무엇이 바뀌었는지, 실무에서 어디에 도움이 되는지(로그/헥스 덤프/프로토콜 디버깅), 그리고 안전한 사용 패턴을 정리한다. meta_keywords: python,bytes,bytearray,memoryview,hex,bytes_per_sep,binascii,b2a_hex,Py_ssize_t,sys.maxsize,OverflowError,Argument Clinic,debugging,hexdump,logging,protocol,binary,호환성,경계값,테스트 meta_robots: index,follow 바이너리 로그를 남기거나(패킷/토큰/압축 데이터), 디버깅용으로 bytes.hex() 를 쓰다 보면 이런 걸 해본 적이 있을 거다. “너무 길어서 보기 힘드니, 구분자(sep)를 넣어서 그룹으로 끊자” 예: payload.hex(':', 2) # b9:01ef 처럼 2바이트마다 구분 payload.hex(' ', -2) # 반대 방향(왼쪽부터)으로 2바이트마다 이때 bytes_per_sep 에 “엄청 큰 값”을 넣으면, 사실상 구분자를 넣지 않는 효과가 난다. bytes_per_sep 가 길이보다 크면 → 구분자 없음 그런데 C...
CPython: 이제 bytes.replace()의 count를 키워드로 쓸 수 있다 — 그런데 이 변화가 실무에 주는 이득은? meta_description: CPython에서 bytes.replace()/bytearray.replace()의 count 인자가 키워드 인자로도 지원된다(gh-147856). 겉보기엔 사소한 문법 변화지만, 래퍼 함수/타입 힌트/리팩터링 안정성, 그리고 바이너리 프로토콜 처리 코드의 가독성에 꽤 도움이 된다. 이 글은 무엇이 바뀌었는지, 기존 코드와 호환성은 어떤지, 실무에서 어떻게 써야 이득이 되는지(예시 포함) 정리한다. meta_keywords: python,bytes,bytearray,replace,count,keyword argument,stdlib,cpython,argument clinic,METH_KEYWORDS,refactor,typing,protocol,binary,text processing,호환성,가독성,리팩터링,테스트 meta_robots: index,follow 파이썬 표준 라이브러리/빌트인에 들어가는 변화는 가끔 ‘한 줄짜리 편의’처럼 보이는데, 실제로는 코드베이스 전체의 유지보수 비용을 조금씩 깎는 역할을 한다. 이번 CPython PR(gh-147856)이 딱 그 케이스다. 이제 bytes.replace() 와 bytearray.replace() 에서 count 를 키워드 인자 로 줄 수 있다. 예전에는 이렇게만 됐다. b"aa".replace(b"a", b"b", 1) 이제는 이렇게도 된다. b"aa".replace(b"a", b"b", count=1) “그래서 뭐?” 싶을 수 있는데, 실무에서 특히 바이너리 처리 코드 를 많이 만지는 팀에겐 의외로 이득이 있다. 1) 정확히 무엇이 바뀌었나: 시그니처가 ‘positional-only...