본문 바로가기

python/파이썬 효율적으로 코딩하기

(4)
while 순환보다 for 순환 사용하기 가능하다면 파이썬다운 순환인 for item in iterable을 사용하는 것이 좋다. 순환을 작성할 때 for와 while 중 선택해야 하는 경우가 종종 있다. 물론 두 가지 모두 사용할 수 있다. 사용하는 언어가 무한 반복자(iterable)을 가지고 있다면 for만 사용해도 충분하다. while과 for 사이의 형식적 동일성에도 불구하고 일반적으로 while 순환보다 for 순환이 더 파이써닉하다고 느껴진다. 물론 많은 예외가 있지만 파이썬에서 순환을 사용할 때는 거의 전부라 해도 좋을 정도로 컬렉션이나 생성기 함수 (Generator Function), 생성기 순환 표현식 (Generator Expression), 사용자 정의 반복 가능 클래스와 같은 반복 가능 객체 사이를 순환하는 경우가 대부..
순환 중 객체 변형 순환 중인 객체를 변형시키면 안된다. 때로는 잘못된 결과가 발생하지 않고 순환을 벗어날 수도 있지만, 그래도 안좋은 습관이다. 여기서 주목해야 할 점은 일부 파이썬 객체가 불변(immutable)이라는 것이다. 예를 들어 str, bytes, tuple, frozenset 객체를 순환하는 경우 기본 컬렉션이 변형되는 문제가 발생하지 않는다. 그럼에도 불구하고 많은 파이썬 객체들은 가변(mutable)임과 동시에 반복 가능하다. 대표적으로 list, dict, set, bytearray 등이 있다. 순환 중인 객체를 변형시키려고 하면 여러 가지 면에서 문제를 일으킬 수 있다. my_set = {'h','e', 'l', 'l', 'o'}my_set = set(my_set)for i in my_set: ..
dict.key()로 순환하지 않기 dict.items()가 필요할 경우 dict.keys()로 순환하지 않기파이썬의 목록과 색인 위치와 값의 사상(mapping)을 거의 동일시하는 경우가 있다.더보기파이썬에서 "사상"이라는 용어는 일반적으로 "mapping" 또는 "association"의 의미로 사용됩니다. 이 개념은 특정 집합의 원소들 간의 관계를 정의하는 것입니다. 파이썬에서는 사상(mapping)을 보통 딕셔너리(dictionary)와 같은 데이터 구조로 구현합니다.여기서 색인 위치와 값의 사상을 거의 동일시하는 경우는, 목록(list)와 그 인덱스 간의 관계를 의미합니다. 목록(list)은 인덱스와 값 간의 직접적인 사상을 제공합니다. 즉, 목록의 각 인덱스는 해당 인덱스에 위치한 값을 가리킵니다. 이 경우, 인덱스는 사상의 "..
색인을 순환하는 대신 enumerate 사용하기 C에서 파생된 언어를 사용하는 개발자들은 목록이나 다른 데이터 구조를 순환할 때 대부분 색인 요소를 사용하는 경향이 있다. 하지만 이것은 일반적으로 파이썬답지 않은 순환 방법에 해당한다. 아래와 같은 코드는 일반적으로 코드의 악취로 간주된다.for i in range(len(items)): process(i, i[i]) 순환안에서 색인 위치를 전혀 사용할 필요가 없는데도 불구하고 색인을 사용하는 것은 좋은 방법이 아니다. 더 관용적인 사용 방식은 아래와 같이 단순하다.for i in items: process(None, item) 색인과 그에 연결된 항목을 모두 사용하는 경우가 비교적 흔한데, 이 경우 enumerate 함수를 사용하는 것이 훨씬 관용적이고 직관적이다.for i, idx in enumer..