2011-04-21 4 views
1

이 코드가 매끄럽게 실행되지 않는 이유는 누구나 아는 사람 있습니까? yield 키워드를 사용하여 반복을 좋아하지 않는 것 같습니다. 모든 수준의 목록 또는 사전 (특히 목록에 관심이있는)의 모든 숫자를 채취하려고합니다. 두 번째 반복에서 [2,3]을 찾았지만 2와 3을 하나씩 인쇄하지 못했습니다 ... 많은 레벨의 목록을 가질 수 있다고 상상해보십시오.파이썬 반복

+0

밤 이니까 논의 할거야. – hephestos

+0

평범한 flatten과 digIn()의 차이점은 무엇입니까? – tokland

+0

@tokland, 무슨 뜻이야? – hephestos

답변

1

생성기를 다시 가져와 모든 목록 요소를 반복적으로 반복해야합니다.

if isDict(each) or isList(each): 
    for elem in digIn(each): 
     yield elem 
else: 
    yield each 
+0

Kugelman 님이 제안하신 것처럼 ... – hephestos

1

digIn(each) 올바르지 않습니다. 이를 반복하고 차례대로 각 값을 산출해야합니다.

1

재귀 호출 digIn을 호출하면 내부 출력에서 ​​외부 호출에서 값이 반환되지 않습니다. 대신 재귀적인 digIn이 생성기를 반환하고 있습니다. 그런 다음 해당 생성기를 무시하고 내부 항목을 잃어 버리는 것입니다.

재귀 호출의 결과를 명시 적으로 생성해야합니다.

+0

흠 ... 나는 수확량보다 잊어 버린 것에 대해 읽었습니다.이 문제는 나를 – hephestos

+0

예, 잘못 들여 썼습니다. –