2011-07-01から1ヶ月間の記事一覧

高階関数(クロージャ)とメソッド(クラス)

(書いていたら当たり前な感じのことになった。) クロージャとオブジェクト こんな話がある。 クロージャ(閉包)があればオブジェクトは作れる。 クロージャとオブジェクトの機能としての豊かさは等価だ。 オブジェクトは状態を持つ。 あまり厳密な話をする気…

継続とか全然理解してなかった

(個人用のメモ。gauche前提の話)本当は探索用の手続きだったけれど、本質とは関係ないのでもっと単純な例で書くことにする。以下のようなコードがあるとする。 (define (rec n) (let loop ((i 0)) (unless (> i n) (print i) (loop (+ i 1))))) (rec 4) ;; ;…

dummyObjectとかを作るとき

テストの時、モデルに対応したオブジェクト作るの面倒。dummy objectとか使う。 class ObjectLike(dict): def __getattr__(self, k, default=None): # default is not used return self[k] def __setattr__(self, k, v): self[k] = v book = ObjectLike(auth…

pythonにパターンマッチがあったら。

match xs.type: "int": return xs.sum() "str": return [int(x) for x in xs].sum() _: return None match (x, y): xs@((type_x, val_x), (type_y, val_y)) if type_x == type_y: print xs return fn(type_x, (val_x, val_y)) xs@(x$int, y$int): return fn(…

phantomjsのインストール

js

git clone git://github.com/ariya/phantomjs.git cd phantomjs sudo apt-get install pyqt-tools libqt4-dev python-qt4-dev python-qt4 qmake-qt4 && make exampleとかあるので覗いてみる。

formsetのテスト面倒。

formsetの取る引数の形式が独特なのでそれに合わせてデータを作るのが面倒。 こんな感じの関数を作っておくとテストのとき楽かもしれない。 def formset_to_params(formset): r = {} mform = formset.management_form for k, bf in zip(mform.fields.keys(),…

formsetで外部から状態を注入したい場合。

こんな感じに書くと、何も考えずに使えて便利かもしれない。 from django.conf import settings settings.configure() import django.forms as forms from django.forms.formsets import BaseFormSet, formset_factory class ExtraArgsForm(forms.Form): def…

propertyの継承(getterのみ -> getter,setter両方提供)

propertyは以下のような感じで使える。 例えば、渡された数値を整数値として扱いたいようなオブジェクトの例。 class Obj(object): def __init__(self): self._n = None @property def n(self): return self._n @n.setter def n(self, v): self._n = abs(v) …

pythonのスコープ

エラーになる。 def f(): x = 0 def g(): x += 1 print x g() f() # UnboundLocalError: local variable 'x' referenced before assignment primitiveな値ではなく、オブジェクトなどの参照を保持する値を使えば大丈夫. class Ref(object): def __init__(sel…

memo pythonでの部分適用

functools.partialの存在意義が分からなかった。 lambdaで包んで返せばそれで良いと思っていた。 勘違いしていた。 確かに、functools.partialは便利だ。 def f(x): def _f(): return x + 1 return _f xs = [f(x) for x in xrange(10)] print [x() for x in …

jquery-uiのautocomplete

ここだけ変更してくれたら、複数のパラメータを渡して通信できるのに。 $ diff -u original.js jquery.ui.autocomplete.js --- original.js 2011-07-05 16:10:42.578595998 +0900 +++ jquery.ui.autocomplete.js 2011-07-05 16:11:47.568595994 +0900 @@ -27…

そろそろ頭を整理したい。

クラス作る or not 継承、デコレータ mixin, 委譲