[18] Use zip to Process Iterators in Parallel
·
EffectivePython_125
오늘은 여러 리스트나 이터레이터를 동시에 다룰 때 인덱스로 접근하지 말고왜 zip을 써야 하는가에 대한 본질적인 이유와 주의점을 공부해 보자. 일단 우리가 익숙한 인덱스 접근의 문제점을 살펴보도록 하자. names = ['김도훈', '김석범생이', '유동남서북치고장구치고']counts = [len(n) for n in names]longest_name = Nonemax_count = 0for i, name in enumerate(names): count = counts[i] if count > max_count: longest_name = name max_count = count 가장 긴 이름을 가진 단어와 그 길이를 구하는 코드이다. 물론 지금도 원하는 기능을 수행..
[17] Prefer enumerate over range
·
EffectivePython_125
range보다는 enumerate를 사용하라고 한다. 파이썬의 range 내장 함수는 정수 시퀀스를 순회하는 루프를 만들 때 아주 유용하다. 실제로 지금까지 많이 써오기도 했다. 하지만 리스트의 위치에 대한 오프셋을 생성하는 경우를 살펴보도록 하자. 다음은 가장 좋아하는 아이스크림 맛의 순위를 출력하는 코드를 range로 작성한 것이다. flavor_list = ["vanilla", "chocolate", "pecan", "strawberry"]for i in range(len(flavor_list)): flavor = flavor_list[i] print(f"{i + 1}: {flavor}")물론 코드는 잘 작동하지만, 리스트의 길이를 알아낸 후 배열에 인덱스로 접근하여 값을 가져오는 과정이..
[11] Prefer Interpolated F-strings over C-style Format strings and str.format
·
EffectivePython_125
C 스타일의 형식 문자열과 str.format보다는 f-string을 사용하라!파이썬 3.6부터 도입된 이 기능은 단순히 편의성을 넘어서 이제 표준이라고 봐도 무방하다. 1. 핵심 개념-> Pythonic함에서 언제나 강조하듯이, 가독성은 생명과 같고 명시적인 것이 암시적인 것보다 좋다. C 스타일의 % 연산자나 str.format() 대신 f-string을 사용해야 하는 이유는 다음과 같다. 오류 방지 : % 연산자는 변수의 순서나 타입을 바꾸면 TypeError 가 발생하거나 엉뚱한 값이 들어갈 위험이 크다.가독성 : strr.format()은 변수명을 중복해서 써야 하므로 코드가 장황해진다. 반면 f-string은 변수 위치에 직접 값을 삽입(Interpolation)하므로 코드가 훨씬 짧고 직..
[10] Know the Differences Between bytes and str
·
EffectivePython_125
https://effectivepython.com/ Effective Python › The Book: Third EditionEffective Python will prepare you to make a big impact with Python.effectivepython.com오늘 공부한 내용은 bytes와 str의 차이를 알라! 이다. 지금까지 엑셀이나 csv 데이터를 불러올 때 UnicodeDecodeError를 수없이 마주했었다. 흠 디코드 에러? 그럼 UTF-8을 뭐 어떻게 하면 되겠지 하고 이유를 모른 채로 해결한 적이 많았는데, 오늘 그 이유에 대해서도 알아보자. 문자열을 다룰 때 가장 기본이 되는 bytes 와 str의 차이를 이해하면 한글 깨짐 현상을 해결하는데 도움이 될 것이다. ..
[08] Prevent Repetition with Assignment Expressions
·
EffectivePython_125
나름 파이썬을 좀 써봤다 생각했지만 생전 처음 들어보는 연산자가 등장했다..! 바로 Walrus(해마) 연산자 := 이다. Python 3.8에 도입된 할당 표현식(Assignment Expression)으로, 값을 할당함과 동시에 그 값을 평가할 수 있다. 이를 사용하는 이유는 크게 세가지.중복 제거 : 변수 할당과 조건 검사를 동시에 수행하여 코드를 줄임가독성 : 변수가 사용되는 범위(Scope)와 로직의 흐름이 시각적으로 더 명확해짐패턴 해결 : while 루프에서 데이터를 계속 읽어올 때 발생하는 loop - and - a - half 패턴을 깔끔하게 해결오늘도 역시 bad pattern과 pythonic한 pattern의 코드를 비교해보도록 하자. import retext = "Error:..
[07] Consider Conditional Expressions for Simple Inline Logic
·
EffectivePython_125
깔끔한 표현을 위해 장황한 if/else 문 대신 한 줄짜리 "Conditional Expressions(조건부 표현식)"을 사용하라! 지금까지 단순한 if 문도 # 상황: 숫자가 짝수인지 홀수인지 라벨링num = 10if num % 2 == 0: parity = 'even'else: parity = 'odd'# 문제점: 시선이 분산되고 코드가 길어짐 이렇게 코딩했었다. 난 이게 "Pythonic"한 것이라고 생각했지만 사실 진정한 "Pythonic Code"는 # "parity는 'even'이다. 만약 2로 나눈 나머지가 0이라면. 그게 아니면 'odd'다."parity = 'even' if num % 2 == 0 else 'odd' 영어 문장을 읽는 것처럼 이렇게 conditional ex..
[05] Prefer Multiple-Assignment Unpacking over Indexing
·
EffectivePython_125
https://effectivepython.com/ Effective Python › The Book: Third EditionEffective Python will prepare you to make a big impact with Python.effectivepython.com 인덱싱보단 unpacking을 사용해라!unpacking이 무엇인지 알아보도록 하자. 나도 무의식적으로 쓰고 있던 문법이다. # unpackingfruit = ("strawberry", "watermellon", "orange")first, second, third = fruit # unpackingprint(first, ",", second, "and", third)# 출력결과# strawberry , watermellon..
[04] Write Helper Functions Instead of Complex Expressions
·
EffectivePython_125
https://effectivepython.com/ Effective Python › The Book: Third EditionEffective Python will prepare you to make a big impact with Python.effectivepython.com 파이썬의 간결한 문법은 한 줄로도 강력한 로직을 구현할 수 있다.하지만 이것이 읽기 좋은 코드란 것은 아니다! 아래의 예시를 통해 오늘의 파이썬 팁을 알아가보자 ^^책에서는 URL 쿼리 스트링 파싱을 예로 들었다. my_values = parse_qs("red=5&blue=0&green=", keep_blank_values = True)print(repr(my_values))>>> {'r..