今年最後のWBS土曜版
塩田さんがフワフワのモコモコ&ブーツ
2週間のお別れです~~ぐすん。
10年経って心臓が再び動き出した少女!(イギリス)
たまたまテレビを付けたら、ドラマでピギーバック移植のシーンが有りました。
Python からCOMコンポーネントを使って、Microsoft Excelのファイルを読み込む
Python Win32 Automation – 傀儡師の館
いま、楽天がメンテ中なので、あとで読む
子供でもできる Python
UniDic ってなんだ (Python で人工無能)
BeautifulSoupで株価をゴリゴリ
ジェネレータ+デフォルト引数=イテレータ?
寝ぼけてたら、偶然、こんな感じのコードを書いてしまったのでメモ。
class Test :
def __init__(self):
self.g=(x for x in xrange(1,10))
def next(self):
for i in self.g:
return i
test=Test()
t=1
while t:
t=test.next()
print raw_input(t)
太字が偶然な部分。forループからreturnするたび、数字がカウントアップするという。。。
これって、多分、間違った書きかたかと思われ。。。いや、希望通りに動いてるけどorz
ちゃんとしたイテレータの書き方のチュートリアル探さなくちゃ。。。
もう少しシンプルに書き直してみた
from glob import iglob #globのジェネレータ版
def next(g=iglob("*.jpg")):
for x in g :
return x
#raise Exception
while 1 : print raw_input(next())
-next()を呼ぶたびにカレントディレクトリのjpegファイル名を一個返します。
-終端に来るとNoneを返す
-例外を発生させてもOK
最初、変態~と思ったけど、慣れたら気持ちよくなってきた(汗
イベントドリブンなプログラムで便利です。
いや、ホントは、ちゃんとしたイテレータ書けばいいんですけど(汗
こんなの書かなくても
<<追記>> 2008-01-01
ジェネレータ.next()でいけた。
_>>> g=(x for x in [1,2,3])
_>>> g.next() ;g.next() ;g.next();g.next()
_1
_2
_3
_Traceback (most recent call last):
_ File "<pyshell #14>", line 1, in <module>
_ g.next() ;g.next() ;g.next();g.next()
_StopIteration
この記事書いたときにも同様なコードを試したけど、うまくいかないような気がしたのだけれど、それは勘違いだったみたいです。
Tags: Python
Related posts
Tags: Python