2012-06-22 4 views
2

죄송하지만 바보 같은 질문 인 경우 죄송합니다. 어떻게 작동하는지 생각하지 못했습니다. 반복자 루핑

는 그와 같은 구조를 가지고 반복자를 정의 (가 조금 더 복잡하지만 모델이 작업 할 것) :

class MyIterator(): 

    def __init__(self): 
     print ('nothing happening here') 

    def __iter__ (self): 
     self.a_list=[x for x in range (10)] 
     for y in a_list: 
      print(y) 


    def __next__ (self): 
     self.a_list = [x+1 for x in self.a_list] 
     for y in a_list: 
      print (y) 

을하지만 어떻게 그 위에 내가 루프 수 있습니까? 수동으로 메소드를 항상 호출해야합니까? 아니면 단순히 잘못된 도구를 사용하고 있습니까? 그리고 반복 가능한반복자, 하지만 __next__() 방법을 반환하는 __iter__() 방법을 정의 문제의

+0

참조하십시오 http://stackoverflow.com/a/1956648 :

class Iterable(object): def __iter__(self): return Iterator() class Iterator(object): def __init__(self): self.i = 0 def __iter__(self): return self def __next__(self): result = self.i self.i += 1 return result 

대안은 발전기 기능로 반복자의 __iter__() 방법을 정의하는 것입니다/1229455. – carmenism

+0

링크를 제공해 주셔서 감사합니다. 방금받은 예제가 실제로 그다지 잘 설명하지 않는다는 것을 깨달았습니다. 나는 그것을 편집하려고 노력할 것이다. – YumTum

+0

@Sven : 구문 강조 표시는 어떻게 했습니까? – YumTum

답변

7

하나는 두 가지 개념을 혼합하는 것입니다. 반복자__next__() 메서드를 정의하고 은 self을 반환하는 간단한 __iter__() 구현을 정의합니다. 이런 식으로 뭔가가 :

class Iterable(object): 
    def __iter__(self): 
     i = 0 
     while True: 
      yield i 
      i += 1 
+0

감사합니다. 나는 그 차이를 정말로 알지 못했다! 그래서 __next__ 메쏘드는 항상 값을 돌려 주어야합니까? 왜냐하면 내가하려고하는 것은 \ 033 [문법]으로 좌표 (dict에 저장되어있는) 당 특정 값을 출력하는 것이다. 지금은 결과 값을 반환하는 방법이 없습니다. 모두 한 번에 반환해야하기 때문에 (몇 백 개입니다). 가난한 영어 http://pastebin.com/FaDrTCYz에서 문제를 설명 할 수는 없으므로 전체 코드 (실제로는 지금까지의 개념)를 업로드했습니다. 여분의 에너지가 있다면 나는 매우 감사 할 것입니다. – YumTum

+1

@kyril 반복자가 올바른 것 같지 않은 것처럼 들리지만 ... – glglgl

+0

@glglgl 나중에 값이 처리 된 다음 값의 전체 묶음이 다시 반환되어야하지만 이론적으로는 무한정 확장 할 수 있어야합니다. . 반복자가 할 수있는 일이라고 생각 했나요? 아니면 비슷한 것이 있습니까? – YumTum