2. Lists and Dictionaries

11. Know how to slice sequences.

  • 슬라이싱할 때 코드 번잡성을 줄이라. 시작 인덱스에 0을 넣지 말고 끝 인덱스에 시퀀스의 길이를 넣지 말라.
  • 슬라이싱할 때는 시작 인덱스나 끝 인덱스에 범위를 넘는 값을 넣어도 된다.
  • list 슬라이스에 대입을 하는 것은 원본 list 내 슬라이스의 내용을 바꾼다. list의 길이가 다르더라도.

12. Avoid striding and slicing in a single expression.

  • 슬라이스에 시작, 끝, 스트라이드를 모두 넣는 것은 매우 혼란스러울 수 있다.
  • 스트라이드를 넣고 싶다면 시작 인덱스와 끝 인덱스 모두 없이 양수 스트라이드를 넣어라. 음수 스트라이드는 피하라.
  • 슬라이스에 시작, 끝, 스트라이드를 모두 넣는 것을 피하라. 세 개가 모두 필요하다면, 두 번에 나눠서 하거나 itertools의 islice를 쓰라.

13. Prefer catch-all unpacking over slicing.

  • 언패킹 대입을 list에 사용했을 경우 언패킹되지 않은 나머지 모든 부분은 별표 표현식으로 캐치할 수 있다.
  • 언패킹 시 별표 표현식은 그들이 받는 어떤 길이에 대해서도 리스트를 생성하므로 임의의 위치에 놓여질 수 있다.
  • list를 겹치지 않는 것들로 분할할 때에는 언패킹과 별표 표현식을 쓰는 것이 슬라이싱과 인덱싱보다 훨씬 에러에 강하다.

14. Sort by complex criteria using the key parameter.

  • list 타입의 sort 메소드는 list의 내용을 내장 타입의 기본적 순서에 따라 재배열한다.
  • sort 메소드는 오브젝트에 대해서는 그것이 특정 함수를 통해 기본적 순서를 정의하지 않는 이상 동작하지 않는다.
  • sort 메소드의 key 파라미터는 정렬할 때 list 내 각 항목에서 어떤 값을 비교할지를 알려주는 헬퍼 함수를 제공할 수 있다.
  • key 함수에 tuple을 리턴하는 것은 여러 정렬 기준을 혼합할 수 있게 한다. 단항 마이너스 연산자는 정렬 순서를 뒤집는다.
  • 마이너스 연산자를 쓸 수 없을 경우, sort를 다른 key 함수와 reverse 값을 불러서 여러 정렬 기준을 혼합시킬 수 있다.

15. Be cautious when relying on dict insertion ordering.

  • Python 3.7부터는, dict를 순회할 때의 순서가 원소가 삽입된 순서와 같음을 보장할 수 있다.
  • Python에서는 dict처럼 행동하지만 dict가 아닌 객체를 만들기 쉽다. 그런 객체들에서는 순회할 때의 순서가 원소가 삽입된 순서와 같다고 가정하면 안 된다.
  • 딕셔너리류의 클래스에 대해서는 3가지 주의할 점이 있다. 삽입 순서에 의존하지 않는 코드를 짜는 것, 런타임에 dict 타입을 체크하는 것, 타입 어노테이션과 정적 분석에서 dict 타입을 요구하는 것.

16. Prefer get over in and keyerror to handle missing dictionary keys.

  • 딕셔너리에서 분실된 키를 다루는 데는 4가지 방법이 있다. in 표현식, KeyError 예외, get 메소드, setdefault 메소드.
  • 카운터와 같이 기본 자료형을 담고 있는 딕셔너리는 get 메소드가 제일이다. 딕셔너리 값을 생성하는 것이 비싸고 예외를 던질 수 있는 대입 연산의 경우에도 쓰면 좋다.
  • dict의 setdefault 메소드가 가장 문제를 잘 해결할 수 있을 것 같으면, defaultdict를 고려하라.

17. Prefer defaultdict over setdefault to handle missing items in internal state.

  • 키들이 임의의 집합이 될 가능성이 있다면, setdefault 대신 collections의 defaultdict를 선호하라.
  • 임의의 키를 가진 딕셔너리가 넘겨졌고 이 생성을 제어할 수 없다면, get 메소드로 항목을 접근하라. 가끔 setdefault가 코드를 더 짧게 만들어 선호될 수도 있다.

18. Know how to construct key-dependent default values with __missing__.

  • dict의 setdefault 메소드는 기본값을 만드는 것이 계산량이 많이 들거나 예외를 던질 수 있을 때에는 좋지 않다.
  • defaultdict에 넘겨진 함수는 매개변수를 포함하지 말아야 한다. 매개변수를 넘기면 기본값이 접근되는 키에 의존하지 못하게 하기 때문이다.
  • 기본값이 어떤 키가 접근되었는지 알게 하려면, dict 서브클래스에 __missing__ 함수를 정의하라.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중