Python
JavaScript 再入門から1週間弱。 JQuery で遊べるところまできた。あるフォームの内容を非同期通信するページを Django と JQuery を用いて作成する手順について自分なりに整理してみる。 Ajax 。 フォーム Django でフォームを扱う方法の一つである django.…
すごい乱数生成アルゴリズム「xorshift」 - Pashango’s Blog の Python 最高!! につられて。 random.Random を継承する形で Xorshift アルゴリズムを。なぜつくったのかまったくの謎だけど Python 最高!! だからしかたない。メルセンヌ・ツイスタ (Merse…
随時、更新中。…更新終了。 Python関連読書会 13:20〜14:10 13:20 開始、 14:30 終了。Python チュートリアルの「3.1.4 リスト」から「4.6 関数を定義する」まで。あと None について盛り上がったため 20分くらいオーバー。 NULL およびそれに類するものの動…
Python 札幌第3回開催直前、便乗 Django ネタ。第2回未参加なので既出かも。 manage.py にオリジナルのコマンドを追加する方法について。また、 manage.py shell インタラクティブシェルで実験したいけれど長くなりそう、というときの代わりにも使える。「…
昨日の続き。ジェネレータ作ってみたメモだったはずなのにファイル操作のメモになってしまって、タイトルどうしたものか。 既存ファイルを上書きしないコピー、ムーブ(POSIX編) たぶんこう。 O_EXCL で open システムコールしてファイルを上書きしない環境…
Python札幌・第3回勉強会 は 7/12(日)。札幌は遠いので Ustream 中継で。あと 13:00 から 18:00 まで 5 時間きっちり張り付けるかどうか未定。Ust 参加でも ATND に参加登録すべきだったっけ?15時ごろ追記: 参加登録してきた。
今晩の目的、「同名のファイルが存在しても、重ならないファイル名でコピーをする関数」の作成。仮名 copy_safe 。a\spam.txt, b\spam.txt がすでにあるときに、copy_safe(r'a\spam.txt', r'b\spam.txt') すると b\spam(0).txt という名前でコピーするという…
Python Recipe は『Rubyレシピブック 第2版 268の技』が元ネタなので Python にはない、もしくは Python に不要なものもある。「012:関数の呼び出し制限」、「237:汚染モード(taintモード)を使う」、「155:ワンライナでファイルを更新する」、「015:特異メ…
『210:Pythonのライブラリローダを制御する』を追加。sys.path, .pth, PYTHONPATH, sys.moduels など。
「149:名前がぶつからないファイルを作成」を追加。 os.open に os.O_EXCL を含むフラグを与える。
『211:pythonスクリプトをデバッグする』を追加。 pdb デバッガの使い方の例を書いてみた。
「2009-06-20 - Pythonで遊ぶよ - pythonグループ」の以下のコードを見て。「数値型オブジェクトかを判定する、ただし bool 型は除く」という関数です。 def is_numeric(n): return not isinstance(n,bool) and \ (isinstance(n,int) or isinstance(n,long) …
『169:標準入出力をファイルにつなぎ換える』を追加。通常用途では sys.stdout などを、望みのファイルに結びついているファイルオブジェクトで置き換える。これで十分。 import sys fo = open('spam.txt', 'w') sys.stdout = fo 本当ににつなぎ換えるには o…
手元にある、記事を収めた reStructuredText ファイルの数を数えるとちょうど 100 個。つまり自分が書いた Python Recipe の数が 100 個の大台に乗ったということ。1年半もかかっているので仕事が遅い感は否めないが、飽きずに続けられたのはよかったと思っ…
『249:メソッドを委譲する』を書き加えた。 __getattr__ をうまくつかうとコード量を減らすことができるというネタあり。あと、『256:クラスメソッドの別名を定義する』も書き加え。といってもこちらはただ代入しただけ。
ページ番号などの情報を URL に持たせる時の話。 Django 的には /something/?page=7 のようにクエリ要素を使うのと /something/7/ のような URL はどちらが便利なのか考えてみた。今の時点での結論は「URL ディスパッチャが強力なので /something/7/ でよい…
Django 1.0 以降のモデルは継承することができるらしい。ということで django.contrib.auth.models.User モデルを継承してみた。 from django.db import models from django.contrib.auth import models as auth_models class MyUser(auth_models.User): foo…
HTML 文章を情報源としてデータを構築するときのお供に、 BeautifulSoup 。やはり便利。 テキストに変換 HTML 文章を強引にプレーンテキストに直してみる。 soup2string 呼び出し可能オブジェクト。 >>> from BeautifulSoup import BeautifulSoup >>> html =…
久しぶりの Python レシピ追加、『112:バイナリサーチを行う』。 bisect 組み込みモジュールを使うだけ。未執筆かつ簡単そうなものを探してみたら、これが見つかったのでリハビリがてら。アルゴリズムの勉強のために一から組みたい人は「Python 二分探索」あ…
Firefox のプロファイルフォルダを探す Python の関数 get_profile_path(profile_name=None) を作ったので晒してみる。もう一工夫すれば Thunderbird, SeaMonkey らにも対応できるかも。Firefox 3 の クッキーを読み出そうとしていたときの副産物。クッキー…
『118:ハッシュの要素を挿入した順に取り出す 』投稿。順序を保持する辞書を自作しようとしてたが、 PEP 372 の存在に2日前気づく。そして実装もすでにたくさん存在した。しかも自分のよりもすばらしい出来の。そんなわけでレシピ内容は、それの紹介になっ…
関数に与えられた引数の名前を調べる を読んで。 func_code の存在を思い出していました。そして、この方法だと * 引数、 ** 引数の名前が取り出せないので追加を。 inspect モジュールの出番 結論から。inspect.getargspec で得られます。行われているのは …
Python ディレクトリの日付はどうやって変更するの? — lights on zope より。os.utime は Windows 環境ではディレクトリを操作することができないことを知りました。これは指摘されるまで気がつきませんでした。そこで対策を考えてみました。(何か見落とし…
MIDIData の子の親は? 30分前 に存在を知った addressof 関数をさっそく試してみる。 >>> from ctypes import * >>> import mididata._mididata as _mididata >>> import mididata._miditrack as _miditrack >>> data = _mididata.LoadFromSMF('chocho.mid'…
2つのポインタの指し示す先が同じものかどうか確認する。本来ならば比較するだけのはず。しかし、これを Python 、 ctypes でどう実現するのかが分からなかった。 Python でつくられたポインタオブジェクトはあくまで Python のオブジェクトであって C のポ…
くずさんのおーぷんMIDIプロジェクト 、 MIDIDataライブラリの Python ラッパー作成中。現在、 __del__ メソッドでのメモリの自動開放を行えるようにしようとしているが、うまく動作せず。多重開放してしまう。上位のオブジェクトを Delete すると、下位のト…
くずさんのおーぷんMIDIプロジェクト 、 MIDIDataライブラリの Python ラッパー作成中。現在、mididata.MIDIData, miditrack.MIDITrack, midievent.MIDIEventクラスの作成が終わり、以下のコードが動くようになったところ。これからテストコードの作成の予定…
くずさんのおーぷんMIDIプロジェクト 、 MIDIDataライブラリの Python ラッパーをつくりはじめた。現在 MIDIIO.dll の公開関数を ctypes でラップし終えたところ。 (オリジナルの使用方法)(C言語、MIDIDataライブラリ 公式ガイドブックより) #include <stdio.h> #in</stdio.h>…
おーぷんMIDIぷろじぇくと を先日発見。これ Python から使えると便利な気がしてきた。気のせいかも? DLL の形式でも公開されているため、とりあえず ctypes つかえばベタなラッパーは何も考えずに書ける。たとえば MIDIIOライブラリならこんな感じ。でもベ…
「088:多次元配列をループする」 。再帰関数で書いたことはあったけれど、再帰ジェネレータ? で書いたのは初めて。 def traverse_unsafe(iterable): try: # イテレート可能かどうか確認 i = iter(iterable) except TypeError, e: # イテレート不可、データ…