Pythonic Thinking(2) 파이썬 효율적으로 사용하기
첫번째 챕터 Pythonic Thinking의 4-6번 팁을 간단하게 요약해보자.
- F-String을 C-Style Format, str.format보다 우선해서 사용하자.
Formatting은 미리 정의된 텍스트와 데이터 값을 사람이 이해할 수 있게 합쳐서 하나의 문자열로 표현하는 과정을 말한다.
a = 0b10111011 b = 0xc5f print('Binary is %d, hex is %d' % (a, b))
위 코드에서 % 옆의 부분을 format string이라고 부르며, %d 부분을 오른쪽의 값들이 대체한다. %는 C의
printf
함수로부터 유래한다. 따라서 이러한 format을 C-style format이라 부른다. C 언어를 사용하던 프로그래머라면 이러한 C-style format string을 사용하는데 익숙하겠지만 네가지 문제가 존재한다.- 데이터의 타입이 바뀌면 에러를 발생시킨다.
- 읽기 어려워 수정이 쉽지 않다.
- 똑같은 format string을 여러번 사용하고 싶을 때, 오른쪽의 tuple을 반복해야 한다.
- 3번 문제 해결을 위해 dictionary를 이용할 수 있지만 오른쪽의 key를 최소 두번 지정해줘야 한다.(오른쪽의 format specifier에서 한번, dictionary에서 한번)
Python3에서부터 str.format을 이용하여
%
대신{}
을 placeholder로 사용할 수 있게 됐다.
하지만 이 또한 위의 2번, 4번 문제를 해결하지 못한다는 문제가 있다.따라서 간결하면서도 강력한 f-string을 사용하자. f-string을 이용하면 아래와 같이 format specifier 안에 직접 파이썬 표현을 추가할 수 있어 유용하다.
for i, (item, count) in enumerate(pantry): print(f'#{i+1}: ' f'{item.title():<10s} = ' f'{round(count)}')
- 복잡한 표현 대신 헬퍼 함수를 사용하자.
- 한 줄로 된 복잡한 코드보다는 반복 사용되는 로직인 경우 헬퍼 함수를 사용하는 것이 명확하다.
if/else
를 하용하는 것이 Booleanor
또는and
를 사용하는 것보다 가독성을 높인다.
- Multiple Assignment Unpacking을 Indexing 대신 사용하자.
item = ('Peanut butter', 'Jelly') # Indexing 예시 first = item[0] second = item[1] print(first, 'and', second) # Mulitple Assignment Unpacking 예시 first, second = item print(first, 'and', second)
Unpacking을 통해
a, b = b, a
와 같이 swap하는 것도 유용하다.- list, str, tuple 같은 모든 iterable에 unpacking을 사용할 수 있다. (iterable 안에 iterable에 대해서도 사용 가능)
- Indexing 대신 unpacking을 사용해서 코드의 명확성을 높이자.
출처: Slatkin, B. (2020). Effective Python: 90 specific ways to write better Python. USA: Addison-Wesley.