Pythonで偶然、変なプログラム書いた

今年最後の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:

Related posts

Tags:

Comments are closed.