/ PYTHON

Pythonic Thinking(2) 파이썬 효율적으로 사용하기

첫번째 챕터 Pythonic Thinking의 4-6번 팁을 간단하게 요약해보자.

  1. 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을 사용하는데 익숙하겠지만 네가지 문제가 존재한다.

    1. 데이터의 타입이 바뀌면 에러를 발생시킨다.
    2. 읽기 어려워 수정이 쉽지 않다.
    3. 똑같은 format string을 여러번 사용하고 싶을 때, 오른쪽의 tuple을 반복해야 한다.
    4. 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)}')
    
  2. 복잡한 표현 대신 헬퍼 함수를 사용하자.
    • 한 줄로 된 복잡한 코드보다는 반복 사용되는 로직인 경우 헬퍼 함수를 사용하는 것이 명확하다.
    • if/else를 하용하는 것이 Boolean or 또는 and를 사용하는 것보다 가독성을 높인다.
  3. 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.