effective python
Effective Python #10
2020. 4. 4.10. range보다는 enumerate를 사용하자 for문에서 list의 index를 다뤄야 할 때 enumerate를 쓴다. >>> flavor_list = ['a', 'b', 'c', 'd','e'] >>> for i, flavor in enumerate (flavor_list): ... print('%d, %s' %(i+1, flavor)) 1, a 2, b 3, c 4, d 5, e enumerate 함수의 두번째 옵션은 iterator의 시작값이다 2로 하면 i를 2부터 센다 >>> for i, flavor in enumerate (flavor_list, 2): ... print('%d, %s'..
Effective Python #9
2020. 4. 4.9. 컴프리헨션이 클 때는 제너레이터 표현식을 고려하자 리스트 컴프리헨션은 결과값이 새로운 리스트다. 따라서 결과를 얻을 때마다 메모리가 소모된다. 리스트 컴프리헨션이 아닌 제너레이터(generator) 표현식으로 표현하면 제너레이터 객체를 전달한다. 이 객체는 iterator를 가지고 있다. result = [len(x) for x in open('test.txt')] 리스트 컴프리헨션 result = (len(x) for x in open('test.txt')) print(next(result)) generator. iterator가 있어서 next로 접근된다. 새로운 list 생성 안한다 제네레이터 안에 다른 제네레이터를 넣어서 쓸 수 있다. 이렇게 복잡하게 할 일 이 ..
Effective Python #8
2020. 4. 4.8. 리스트 컴프리헨션에서 표현식을 두 개 넘게 쓰지 말자 같은 loop level에 여러 조건이 있으면 자동적으로 (암시적으로) and 표현이 된다 something = [...] b = [x for x in something if x > 3 if x % 2 == 0] 개인적으로 and 쓰는게 보기에 편한 것 같다. 줄어도 보기가 힘들다. 표현식이 두 개가 넘으면 리스트 컴프리헨션을 쓰지 말자 조건 두 개 loop 두 개 조건 한 개, loop 한 개 이렇게가 최대치다. 이것보다 복잡하면 if와 for를 사용하는 헬퍼 함수를 사용한다.
Effective Python #7
2020. 4. 4.7. map과 filter 대신 리스트 컴프리헨션을 사용하자 list comprehension 을 쓰면 새로운 리스트를 만들어낸다. map, filter 보다 간결하고 보기 좋아서 리스트 컴프리헨션의 사용을 추천한다. list, dict, set에서 사용할 수 있다.
Effective Python #6
2020. 4. 4.6. 한 슬라이스에 start, end, stride를 함께 쓰지 말자 이 장은 개인적으로 동의하지 않는다. 클린코드에서 말하는 "한 라인에 한 동작"에 확실히 stride가 반대되는 (slicing과 stride를 동시에 한 라인에서 한다) 함수이지만 그렇다고 굳이 할당을 한 뒤에 stride를 사용하는 것은 무의미하다고 생각한다. stride를 음수로 사용하지 않는 것도 음수를 사용하여 뒤집는 것보다 나은 방법이 떠오르지 않기에 동의하지 않는다. (물론, 아예 사용하지 말라고 쓰지 않았더라도) slicing 후 stride를 하면 얕은 복사가 발생하여 주의를 기울이라고 하였는데 그냥 주어진 함수에서 slicing과 stride를 동시에 처리를 하면 된다. start, end, stride를 동시에 사..
Effective Python #5
2020. 3. 29.5. 시퀀스를 슬라이스하는 방법을 알자 일단 시퀀스는 list, str, byte이다. 거기에 __getitem__이랑 __setitem__을 구현한 클래스 포함이다. somesequense[start:end] 형태로 자른다. 또한 start는 포함, end는 비포함된다. 다른 언어에서 잘 쓰는 0, len(list)는 쓰지않고 그냥 비워둔다. 리스트의 범위를 넘겨 잘라도 알아서 범위까지만 처리한다 슬라이스 크기와 할당하는 개수가 다르면 알아서 크기만큼 없애고 할당하는 개수만큼 넣는다. >>> a = [1,2,3,4,5,6,7,8,9] >>> a[2:7] = ['a', 'b', 'c'] >>> print(a) [1, 2, 'a', 'b..