개발서적

[파이썬 코딩의 기술] 1장 파이썬답게 생각하기(1-2편)

비아 VIA 2022. 7. 10. 23:58

회사 동료분과 아직 다행히(?) 꾸준히 <파이썬 코딩의 기술>을 읽는 스터디 중이다. 아직 중간중간 이해가 되지 않는 부분도 많아서 최대한 회사 코드에서 비슷한 부분을 찾아보거나 구글링해서 예시를 보려고 하고 있다. 지금 당장 적용해보지는 못하더라도 일단 '이런 방법도 있다'는 것을 알아두는 것에 의의를 두려고 한다. 지난번에 이어서 1장의 뒷부분 내용을 정리한다.

읽은 범위
1장 파이썬답게 생각하기

목차

  1. 사용중인 파이썬의 버전을 알아두라
  2. PEP 8 스타일 가이드를 따르라
  3. bytes와 str의 차이를 알아두라
  4. C스타일 형식 문자열을 str.format과 쓰기보다는 f-문자열을 통한 인터폴레이션을 사용하라
  5. 복잡한 식을 쓰는 대신 도우미 함수를 작성하라
  6. 인덱스를 사용하는 대신 대입을 사용해 데이터를 언패킹하라
  7. range보다는 enumerate를 사용하라
  8. 여러 이터레이터에 대해 나란히 루프를 수행하려면 zip를 사용하라
  9. for나 while 루프 뒤에 else 블록을 사용하지 말라
  10. 대입식을 사용해 반복을 피하라

6. 인덱스를 사용하는 대신 대입을 사용해 데이터를 언패킹하라

인덱스를 사용해 시퀀스 내부에 접근하는 대신 언패킹을 사용해 시각적인 잡음을 줄이고 코드를 더 명확하게 만들어라

튜플에서 아래처럼 인덱스를 사용하여 데이터에 접근할 수도 있지만

item = ('기술', '블로그')
first = item[0]
second = item[1]
print(first, '&', second)

>> 기술 & 블로그

글쓴이는 언패킹을 사용해서 코드를 명확하게 만드는 것을 추천한다.

item = ('기술', '블로그')
first, second = item #언패킹
print(first, '&', second)

>> 기술 & 블로그

전 회사 사수분이 조언을 해주셔서 최대한 주의를 하고는 있었지만 나도 모르게 인덱스를 쓰는 경우가 종종 있었는데 앞으로는 더욱 신경써서 언패킹을 많이 사용할 수 있을 것 같다.

7 range 보다는 enumerate를 사용하라

enumerate를 사용하면 이터레이터에 대해 루프를 돌면서 이터레이터에서 가져오는 원소의 인덱스까지 얻는 코드를 간결하게 작성할 수 있다.

사실 일을 하면서 enumerate를 사용한 적이 거의 없는 것 같다. range가 더 익숙하고 직관적이기도 했고 enumerate가 정확하게 어떤 기능을 하는지, 실제로 어떻게 사용하는지 많이 접해보지 못했기 때문이다. enumerate를 사용하면 가져오는 원소의 인덱스까지 함께 얻을 수 있다는 점이 큰 장점이 될 수 있을 것 같다. range를 쓸 상황이 생겼을때 꼭 기억해놨다가 써봐야겠다.

8. 여러 이터레이터에 대해 나란히 루프를 수행하려면 zip를 사용하라

zip 내장함수를 사용해 여러 이터레이터를 나란히 이터레이션 할 수 있다.
가장 짧은 이터레이터에 맞춰 길이를 제한하지 않고 길이가 서로 다른 이터레이터에 대해 루프를 수행하려면 itertools 내장 모듈의 zip_longest 함수를 사용하라

이 부분은 사실 과연 써먹어볼 수 있을까? + 쓸 기회가 있을 때 내가 zip을 떠올릴 수 있을까? 하는 의문이 들었다. 회사 코드에서 사용하는 부분이 있는지 찾아봤는데 거의 없어서 구글링으로 예시를 많이 찾와봤던 것 같다. 그래도 익숙하지 않아서 그렇지 은근히 유용한 내장함수 같아서 우선은 알아두는 것에 의의를 두었다.

9. for나 while 루프 뒤에 else 블록을 사용하지 말라

파이썬은 for나 while 루프에 속한 블록 바로 뒤에 else 블록을 허용하는 특별한 문법을 제공한다.
동작이 직관적이지 않고 혼동을 야기할 수 있으므로 루프 뒤에 else 블록을 사용하지 말라

솔직히 회사 동료분과 이 파트에 대해 이야기를 나누며 그동안 한번도 for나 while 뒤에 else를 써볼 생각을 해본적이 없는데 이런 내용이 있어서 놀랐다는 이야기를 했다.(파이썬에서 허용이 되는지도 처음 알았다) 하지만 책으로까지 쓸 정도면 실제로 이렇게 사용하는 사람들이 있다는건가... 이걸 사용해야하는 상황이 있는데 내가 아직 마주하지 못한 것 뿐일까...!