[Effective Python] | April 24, 2021
Effective Python: Second Edition 내용 정리
list
함수가 결과값들을 나열하기 위해 사용할 수 있는 가장 간단한 방법은 list
를 return 하는 것이다.
def count_words(word_list):
result = []
for word in word_list:
result.append(len(word))
return result
count_words(['hello', 'hi'])
>>> [5, 2]
append
method가 매번 호출된다.generator
는 yield
expressions를 사용하는 함수에 의해 만들어진다.
이렇게 작성하면, 결과 list에 대한 상호작용이 사라지기 때문에 가독성이 훨씬 좋다. 대신에 결과는 yield expressions로 넘겨진다.
def count_words(word_list):
for word in word_list:
yield len(word)
count_words(['hello', 'hi'])
>>> <generator object count_words at 0x7f6987602990>
generator는 호출될 때 실제로 실행되는 것이 아니고 iterator를 return한다.
next
built-in function과 함께 호출될 때, iterator는 generator의 다음 yield expression으로 넘어가게 한다. (Solution for problem 1)
func = count_words(['hello', 'hi'])
next(func)
>>> 5
next(func)
>>> 2
필요하다면 generator가 return하는 iterator를 list
built-in function으로 넘겨서 list
로 간단하게 바꿀 수 있다. (Item 32 참조)
func = list(count_words(['hello', 'hi']))
func
>>> [5, 2]
Generator는 임의의 길이를 가진 input에도 쉽게 적용시킬 수 있다.
사용하고 있는 메모리에 input과 output 전체를 저장하지 않기 때문이다. (Solution for problem 2)