美人時計と聞いて飛んでってpythonの勉強した

美人時計と聞いて飛んでってpythonの勉強したをはてなブックマークに追加 美人時計と聞いて飛んでってpythonの勉強したをdel.icio.usに追加 Yahoo!ブックマークに登録 美人時計と聞いて飛んでってpythonの勉強したをGoogle Bookmarksに追加

美人時計というサイトがあって1分ごとに美人な女性が時間を教えてくれるというもの。で、その画像のURLはHHMI.jpgのようになっているので全部抜けるねというエントリを見つけた。
いまpythonの勉強をしていて、こういうコードの書き方が出来るんだーすげーて思った。

import sys,os,urllib,time;[[[globals().__setitem__('url','http://www.bijint.com/jp/img/photo/%02d%02d.jpg' % (i, j))] and [globals().__setitem__('file',open(os.path.basename(url), 'wb'))] and [file.write(urllib.urlopen(url).read())] and [file.close()] and [time.sleep(5)] for j in range(60)] for i in range(24)]

javascriptでブックマークレットなんかを作るときに1行で書くような事はよくあるんだけど、pythonでこんな風にして1行でおさめる方法を知りませんでした。

[[globals().__setitem__( 'hoge', idx )] and hoge for idx in range( 10 )]
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

こんな感じ。ちょっと例が悪いかもしれないけど and で繋いでるとこが知らなかったところ。
globals().__setitem__( ‘変数名’, 値 )をidxぶんイテレートして、且つ(andで)’変数名’のリストを返している。
Djangoへの片思い日記さんで書かれているコードを読んでみると、urlという変数にHHMI.jpgのURLが入ってos.path.basenameでurlを渡してファイル名のみを取得して、ファイルハンドラごとfileという変数に割り当てる。で、urlの画像を読み込んで書き出す。という事で良いのかな。そんな感じで見て取れます。それを24時間60分のレンジで回す。おーエレガントだ!

コメントをどうぞ