michisuの家庭とプログラミング。
Marici / はてなダイアリー / Twitter / mixi / ネタ帳 / 辞書を読むブログ

http://blog.miraclelinux.com/asianpen/2008/05/python-code-rea.html#more

でも実験されていますが、もう少し細かいケースで試してみました。

scope_test.py

def with_local(num): l = [] l_value = True for i in xrange(num): l.append(l_value) def with_nested(num): l = [] n_value = True def nested(num): for i in xrange(num): l.append(n_value) nested(num) m_value = True
def with_module(num): l = [] for i in xrange(num): l.append(m_value) def with_builtin(num): l = [] for i in xrange(num):...

5/9 19:00 -

行ってきました。予備知識的な資料をまとめて発表する係、ソースコードリーディングの進行をする係でした。へたくそな進行でしたが、柴田さんはじめ皆さんに色々つっこんでいただいて勉強になりました。

資料はこちらに上げてあります。

http://groups.google.co.jp/group/python-code-reading/files

日を改めてもうちょい反省したり消化したりない部分を考えることにします。

関連リンク

会場提供していただいたミラクルリナックスのtmorimotoさんによるフォロー。http://blog.miraclelinux.com/asianpen/2008/05/python-code-rea.html#more

数日前に新しいサーバをセットアップしてて気がついたこと。ToscaWidgetsでのフォームの実装twFormsの名前がtw.formsに変わっていた。だもんで

easy_install twForms

がこけた。

easy_install tw.forms

としましょう。というだけの話。

ただし最新版では色々モジュール設計が変わっていたので、既存のTurboGearsアプリで使うために

easy_install tw.forms==0.3.1

とした。

会社で新しいサービスを始めました。

Web集合写真 グルーフォ

まずページを作ります。背景や参加人数、制限時間を決めます。URLが発行されますので、参加者はそこに行って画像をアップロード。人数がいっぱいになるか時間が来ると、合成されて一枚の画像になる仕組みです。

という小ネタっぽいサービスです。例によってTurboGearsで動いてます。

Twitterでやってくれた人もいるみたい。

http://twitter.g.hatena.ne.jp/gorimaru9/20080423

which コマンドの実装

id:t2y-1979:20080409#1207749772

whichはPATHを頭から調べて最初に見つけたものを返すので、

  • 順序を保持しないsetに入れるとまずい
  • ループをbreakしないと最後に見つけたものを出力してしまう

と思います。

>>> set(['a', 'b', 'c', 'd'])
set(['a', 'c', 'b', 'd'])

順序が変わってます。

重複を排除するには、リストにuniqのようなメソッドがあればいいけど、ないみたいです。

こんな書き方ができました。ただ、遅いかも。

>>> l = ['a', 'b', 'b', 'c', 'a']
>>> [ x for i, x in enumerate(l) if x not in l[:i] ]
['a', 'b', 'c']

でも、頭から調べてbreakする処理なら、重複を排除しておく必要はないわけですが。

自分なりに書いたのが以下。

最近「テスト可能なコードが良いコード」と教わり、そういう観点でコーディングを進めてみようと思ってます。

今考えてる進め方はこんな感じです。

まず、実際に使うためのコードを大まかに書きます。この時点では、ほとんどメソッド名だけ。頭の中でなるべく細かくメソッドに分けていきます。メソッドのつながりを考えているうちに短いコードを書いたりもします。

ある程度まで書けたら、スクリプトを使って空のテストメソッドを自動生成します。このスクリプトは、カレントディレクトリ以下の*.pyから関数定義、メソッド定義を探してきて、対応するテストメソッドを作ります。自分用なので適当なところもありますが晒しときます。

make_tests.py

#!/usr/bin/python
import os, sys
import inspect, _ast excluded_dir_names = ["tests"]
excluded_file_names = ["setup.py"] def get_method_names(clsdef):...
敵の陣形は…
敵の陣形は…

木の実
木の実

大泉中央公園
大泉中央公園

ねこばす発見
ねこばす発見

こどもの城・屋上庭園
こどもの城・屋上庭園

こどもの樹
こどもの樹

われわれは唯一不変の確固たる現実世界の中で、さまざまに異なった生き方をするのではなく、むしろ逆に、われわれのこの生き方が、この現実世界を構成するのである。
— 野矢茂樹『大森荘蔵-哲学の見本』
空装。息子がハサミで切って動物にしました
空装。息子がハサミで切って動物にしました