推 huggie:哦..多謝 06/03 02:05
※ 引述《huggie (huggie)》之銘言:
: 我要我自己做的 class 可以 loop for loop
: for X in Y:
: print X
: 請問那個 Y 要怎麼做?
: 我可以設定一個 Y.foo()
: 讓 foo() 變成 generator
: 但如果要直接 loop Y 要如何做呢?
如果你已經有寫好的 generator 就稱它為 Y.foo 好了, 那你可以這樣寫:
class Y:
def foo(self):
...
def __iter__(self):
return self.foo()
或者是如果你不想用 generator, 那也可以寫自己的 iterator, example:
class fib:
def __init__(self, max = None):
self.max = max
def __iter__(self):
return self.iterator(self)
class iterator:
def __init__(self, owner):
self.a, self.b = 1, 1
self.owner = owner
def next(self):
result, self.a, self.b = self.a, self.b, self.a + self.b
if not self.owner is None and result > self.owner.max:
raise StopIteration
return result
>>> j = fib(200)
>>> for k in j:
print k
1
1
2
3
5
8
13
21
34
55
89
144
>>>
--
その乾いた哀愁の瞳に去來するものは何か?
失ったもの 得たもの
そして廣大なネットの狹間で彼が見たものとは?
虛像と實存と記號の中に彼は今、何を想うのか?
<バトルプログラマーシラセ>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.224.64