いま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分のレンジで回す。おーエレガントだ!










