2011-02-03 2 views
1

생성기를 가져와이 생성기의 모든 요소를 ​​산출하는 한 줄짜리 라인이 있습니까? 예 :더 깊게 - 내부 생산량에서 산출량

def Yearly(year): 
    yield YEARLY_HEADER 
    for month in range(1, 13): 
    # How can I rewrite the following two lines? 
    for line in Monthly(month): 
     yield line 
    yield YEARLY_FOOTER 

def Monthly(month): 
    yield MONTHLY_HEADER 
    for day in range(31): # Yes, this is wrong 
    yield 'Day %d' % day 
    yield MONTHLY_FOOTER 

이 전체 방법을 다시 쓰는 것이 더 좋은 방법일까요?

+1

나는 존재하지 않는다고 생각하며, 현재의 코드를 완벽하게 읽을 수 있습니다. 단순한 것이 복잡한 것보다 낫습니다. –

+0

올렉시, 만나서 반가워요. :) – FogleBird

+0

@Tim 너무 가깝지만 파이썬의 올바른 Zen 인용문은 "Simple이 complex보다 낫다"입니다. –

답변

3

이 경우에는 특별한 구문이 없습니다.

PEP 380에서 원하는 내용을 설명합니다. 몇 년 전부터 있었지만 필자는 조만간 파이썬으로 만들 것이라고 생각하지 않는다. for .. yield은 충분히 간단하며 제안 된 다른 변경 사항은 상당히 복잡합니다.

+0

감사합니다. 얼마나 멍청한 15 자 분 제한 :( – Olexiy

+1

Python 3.2가 앞으로 몇 주 내에 나올 예정입니다 .PEP 380은 실제로 Python 3.3에 포함될 예정이지만 2012 년 말까지는 나오지 않을 것입니다. – ncoghlan

+6

Python 3.3은 지금 PEP 380 (수확량)과 함께. – jomido

4
import itertools 

def Yearly(year): 
    return itertools.chain(*[(YEARLY_HEADER,)] + 
         [Monthly(m) for m in range(1, 13)] + 
         [(YEARLY_FOOTER,)]) 

기본적으로, 반복자에 YEARLY_HEADERYEARLY_FOOTER을, 그들은 매달 반복자와 체인 될 수있다.

+6

좋은 지적은 여기에. 네, 단 하나의 라이너가 있습니다. 대부분의 단일 라이너와 마찬가지로 읽기가 더 어렵습니다. –

관련 문제