2010-04-01から1ヶ月間の記事一覧

super 関数の返す値についてメモ

基底クラスに定義されたメソッドを派生クラスから呼びたい。たとえば基底クラスのメソッドをオーバーライドするとき、基底クラスのメソッドを呼んで元々の処理をした上で、独自の処理を追加したい。組込みの super 関数があるので調査してみた。 # kissa.py …

2010-04-25の読みさし

赤ちゃんにおむつはいらない:100% 赤ちゃんにおむつはいらない作者: 三砂ちづる出版社/メーカー: 勁草書房発売日: 2009/08/29メディア: 単行本購入: 3人 クリック: 12回この商品を含むブログ (13件) を見る面白かった。ちゃんと感想を書きたいな。 役に立つ…

パッケージに含まれたモジュールをいっぺんに reload する正しくない方法

kissa パッケージを開発しているとしよう。Python を対話的に使っていて、import kissa すると、kissa/__init__.py の中で必要なモジュールを from . import lintu のように import している。パッケージはまだまだ開発中でいろいろいじっているので、対話的…

大きな array を初期化するのは何が速いか調べる修行

大きな array、たとえば 100 万個の要素の array を 0 で初期化したい。まずは、普通に 0 が 100 万個入ったリストを作ってしまって、それで初期化する方法 (list)。次に、0 を 100 万回生成するジェネレータで初期化する方法 (iter)。最後に 100 万回ループ…

それ、Fraction 使えば

与えられた小数に近い整数比を生成するジェネレータ - 昨日知ったこと を考えたりしたけれど、fractions — Rational numbers — Python 3.7.3 documentation なんてのがあってこんなのが書かれている。 >>> from fractions import Fraction >>> Fraction('3.1…

Python 3000 こんにちは

メインマシン CentOS 5.4 の yum でインストールされる Python は 2.4 系である。Redhat 系の管理ツールとか Xen の管理ツールとか Python で書かれているものがあるから、おいそれとアップグレードするわけにもいかない。 とりあえず /opt/python3.1.2/ 以…

クロージャを渡して順列生成、をまねしてみる

ある集合 S の部分集合 Q の中で、要素数が一定以下のもの (|Q| Python らしい書き方があるに違いない。まずは順列生成ジェネレータとかあるだろうな、と検索したら、次の記事を見つけた。 pythonでクロージャを渡して順列生成 - yattのブログ いやー。すご…

配列のメモリ使用量を調べたりする

メモ。 >>> def ps(): os.system("ps -p %d u" % os.getpid()) ... >>> import os >>> ps() USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND takeyuki 30831 0.0 0.0 7188 2604 pts/7 S+ 14:05 0:00 python >>> import numpy >>> ps() USER PID %CP…

与えられた小数に近い整数比を生成するジェネレータ

ある浮動小数点数が与えられたときに、それを簡単な整数比で表せないか、できるだけ簡単な整数比で洗わしたいのだが ... 。という問題を解決するためのジェネレータを作ってみた。小数部分だけ整数比で表せれば整数部は簡単に求まるので、0 以上 1 未満の小…

itertools を使ってみる修行、その 1 -- groupby

itertools.groupby を使ってみる。0 から 9 の整数を 3 で割った余りでグルーピングしてみる。 >>> [(x[0], [y[0] for y in x[1]]) for x in itertools.groupby(sorted([(x,x%3) for x in range(10)], key=lambda x:x[1]), lambda x:x[1])] [(0, [0, 3, 6, 9…

クラス変数とインスタンス変数の混同に注意

WEB で property 周りの記事を調べていたら、次のようなコードで、x や y をインスタンス変数だと解説している例を見つけた。 class C(object): x = 10 y = 20 確かに、 >>> c = C() >>> c.x # ... (1) 10 >>> c.x = 30 # ... (2) >>> c.x # ... (3) 30 とな…

staticmethod が not callable だと怒られる現象に悩む

静的メソッドを定義し、そのメソッドをそのクラスの中で使用しようとしたら staticmethod が callable でないと怒られた。 >>> class Karhu(object): ... @staticmethod ... def test(): ... return "test" ... x = test() # ... (1) ... Traceback (most re…

イテレータを反転したイテレータを得る修行

イテレータを渡すと、それを反転したイテレータが返るような関数がないものか、と思ったけど、なさげ。reversed() はシーケンスを引数に取ってそれを反転したイテレータを返す。イテレータから一旦シーケンスを経由すれば大丈夫、ということになる。つまり、…

2 引数の iter() を使ってみる修行

イテレータを作る関数 iter() はシーケンスやイテレータを引数に渡すことになっている。だけどもうひとつ、実行可能なオブジェクトと番兵を渡す 2 引数のバージョンもあるようだ。ということで、使ってみた。 import random class Kissa(object): def __call…

リストの中で条件にあう要素をリストの末尾から調べて最初に見つかったもののインデックスを得る修行

あるリストの中で特定の条件にあう要素のインデックスを知りたい。しかも、リストの末尾から調べて最初に見つかるものの。たとえば >>> a = range(5,94,13) >>> a [5, 18, 31, 44, 57, 70, 83] として、3 の倍数になっている要素は 1 番目 (最初の要素が 0 …