제 발전기의 다음 두 정의 사이에서 결정하려고합니다. 어떤게 더 좋아? 어느 쪽이 "더 파이썬"인가? 그리고 어쨌든 각각의 단점을 완화 할 것입니까?파이썬 생성기 - 마지막 결과를 변경 하시겠습니까?
def myGenerator1(howMany):
result = [0,0,0]
yield result
for i in range(howMany)
modifyListInPlace(result)
yield result
for val in myGenerator1(1000):
useValThenForgetIt(val)
def myGenerator2(howMany):
result = (0,0,0)
yield result
for i in range(howMany)
result = createNewUpdatedTuple(result)
yield result
for val in myGenerator2(1000):
useValThenForgetIt(val)
첫 번째 것은 생성기에 의해 반환 된 값을 수정합니다. 아직 예상하지 못한 호출 코드로 엉망이 될 수 있습니다. 두 번째는이 경우 1000 개의 튜플을 생성합니다. "howMany"를 늘리면 더 많은 양의 쓰레기가 생성됩니다.
내가 예로 든 루프는 현재 나의 발전기를 사용하는 것입니다. do not do 나는 그것에서 나오는 값을 저장 하겠지만 다른 곳에서는 유용 할 수있는 약간의 유틸리티이다.
"쓰레기"가 성능에 미치는 영향이 걱정된다면 ** 성능을 테스트하십시오 **. –
좋은 지적. 필자는 성능에 대해 특별히 관심이 없으며, 그런 디자인이 좋은 연습인지, 눈살을 찌푸린 지에 대한 지침을 찾고있다. –
@ 레이몬드는 건설적인 대답을 위해 대단히 감사합니다. 심지어 바보 같은 질문입니다. 나는 여전히 파이썬 놈이므로 내 길을 찾아 냈다. itertools에 대한 링크를 따라 가면서 itertools.product ([[0,1,2]] * 3)를 찾고 있습니다.하지만 다른 튜플을 반환한다는 것을 알면 유익합니다. –