Python

メモ

後で読む。 言語としての一貫性を重視したPython 3の進化 (http://www.atmarkit.co.jp/fcoding/articles/python3/02/python302a.html)

メモ

What's New In Python3.0 日本語版 (http://d.hatena.ne.jp/nishiohirokazu/20090123/1232662308)

メモ

The History of Python (http://www.kt.rim.or.jp/~kbk/zakkicho/09/zakkicho0901c.html#D20090121-5) The History of Python: Personal History - part 1, CWI (http://www.kt.rim.or.jp/~kbk/zakkicho/09/zakkicho0901c.html#D20090122-2)

Function Annotations

大カフェイン: Python 3.0 かわいいよ (http://d.hatena.ne.jp/hope-echoes/20081224/1230130260) PEP 3107 -- Function Annotations (http://www.python.org/dev/peps/pep-3107/) id:hope-echoesさんの日記からの引用。 def plus(lhs: int, rhs: int) -> in…

mapとzipのまとめ

ときどきの雑記帖 i戦士篇: 本日の[マム]板から (http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0812c.html#D20081228-7) 2chのPythonのお勉強 Part30の834によるとmapとimapによると微妙に挙動が異なるらしい。例えば以下を2.5.xでテスト。 >>> map(la…

exe2py

メモ。あとで試す。 適当なブログ: py2exeで作成されたファイルの逆コンパイラ作った (http://d.hatena.ne.jp/xor0x35/20081219/p1)

動的言語とオブジェクト指向

クラスおよび継承の意義は以下のものだと思う。 ポリモーフィズム(インタフェース) カプセル化(名前空間) マルチプルインスタンス Mix-in(集約、委譲) Pythonなどの動的言語では基本的にはDuckTypingなのでインタフェースという考え方がない。Python3.0ではA…

アーカイブ

PythonでJavaのjarのようなアーカイブを作成する方法がないかと思って探して唯一zipimportというのを見つけた。しかしsys.pathにzipファイルを追加しないといけないのが面倒。他にもっと良い方法はないのだろうか?結局、まとまったライブラリを配布するには…

メソッドのself (4)

メソッドの第一引数にselfを指定する1つのメリットを見つけた。Guidoさんも言及していたかもしれないがメリットは、foo.meth(arg)を、Foo.meth(foo, arg)と書けることである。これは、高階関数として使う場合にメリットがある。 例えば、複数のsetのオブジェ…

メソッドとクロージャとオブジェクト

ときどきの雑記帖 i戦士篇: Rubyについて Part 33 (http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0811c.html#D20081125-5) メソッドとクロージャに関して、 表層的には ・ブロックが関数と同等でない(ブロックをとれないなど) ・内部関数(Schemeのinte…

メソッドのself (3)

mopemopeのおらっちゃ富山県民やちゃあ: selfの話 (http://d.hatena.ne.jp/mopemope/20081128/p2) デコレータの問題点を挙げて頂いた。ありがとうございます。 def deco(fun): def meth(arg): #このselfって?? self.val = "decorator" return self.val ret…

メソッドのself (2)

メソッドのselfに関して再考してみる。selfをなくすためにPythonに互換性を持たせる必要があるということは、ここでは無視する。 和訳 : なぜPythonのメソッド引数に明示的にselfと書くのか (http://coreblog.org/ats/translation-of-why-explicit-self-has-…

llvm(Low Level Virtual Machine)

llvmの存在を知った。時代はここまで来ていたのか。C言語はますますマシン語に近くなると思われる。生のCで書いても最適化が必要になるので、下手をしたらllvmで動かした方がパフォーマンスが上がるかもしれない。 py2llvmというのがあるらしいが、期待でき…

メモ

後で読む。 正規表現エンジンを作ろう(1) (http://codezine.jp/article/detail/3039/) 正規表現エンジンを作ろう(2) (http://codezine.jp/article/detail/3154/) 正規表現エンジンを作ろう(3) (http://codezine.jp/article/detail/3158/)

seven things I hate about my favorite language Python

5個じゃ足りなかったので7個。参考: http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0811b.html#D20081112-4 ブロックがファーストクラスオブジェクトではない 静的型付けがない 関数とメソッドの関係 無限の扱いが弱い 文字列フォーマットが見づらい i…

文字列結合のパフォーマンス

Efficient String Concatenation in Python (http://www.skymind.com/~ocrow/python_string/) 2.5.2でテスト。 import time def profile(func): def foo(*a, **k): t = time.time() r = func(*a, **k) print '%s: %g sec elapsed' % (func.__name__, time.ti…

シーケンスとイテレータのまとめ

Pythonのデータ並びはシーケンスとイテレータの2種類ある。どこまでの操作で関数を実装すれば、引数として受け取れるという観点から操作をまとめる。ここで考える具体的な型は、list型とstr型のみとする。バージョンは2.5.xとする。引数で受け取る値をLとす…

Cython 0.10リリース

11月8日に0.10をリリースした模様。以前のバージョンは、0.9.8.1.1。前のバージョンとの差分情報は見つからなかった。 少し前に自分のブログでCython + ctypesのコンボに関して考えていたが、よく考えたらCythonの中でC/C++の関数を呼び出せるのでctypesを使…

Cython + ctypes = 最強コンボ?

Cythonのファイル.pyx内では、Pythonの関数をdefで、Cの関数をcdefで定義する。Cythonで作成したものをPythonから呼びだすには、Cythonで作成した.pydファイル(Cythonから自動生成された.cファイルをPythonのDLL化したもの)をimportして使用する。test.pydな…

multiprocessingの時間計測

Intel Core2 Duo CPUマシンでmultiprocessingモジュールを使用した場合としない場合の実行時間を比較した。Pythonは3.0を使用。2.6でもOK。 from multiprocessing import Process import time def fib_n_times(cnt): for i in range(1, cnt+1): print('%d =>…

Cythonのパフォーマンス

2chの「pythonがこの先生きのこるには」というスレでfibでCythonがかなり遅い結果になっていたので調べてみた。 Pythonは、2.5.2、Cythonは、0.9.8.1.1を使用。 以下は、psycoを使用した通常のPython。 1.157秒。psycoを外すと 19.844秒。 # pyfib.py def fi…

メモ

C/C++とPythonの連携 pythonとc++のインターフェイスの比較 swig boost.python ctypes http://d.hatena.ne.jp/niitsuma/20080209/1203184397 C or C++でPythonを拡張する方法 (または C or C++ でPython Extension modulesを書く) http://spamalot.dip.jp/lu…

メモ

渋日記: 「[翻訳]Pythonを使って2MBのメモリで100万の数値をソートする」 (http://sky.ap.teacup.com/shibu/69.html) やはりバイナリはstructモジュールでなくarrayモジュールなのか。3.0でもstructモジュールはなくなってない。あとはバッファリングを自前…

tkinter

Python 3.0でTkinterモジュールが標準ライブラリからドロップしたと思ったら、tkinterモジュールに名前が変更されているだけだった。Pyhon以外何もインストールしなくても使えるのでやはりwxPythonよりも手軽。 しかし、Tkinter調べていたらドラッグ&ドロッ…

Python 3.0のrangeの注意点

Python 3.0をテストしていて驚いたのが以下の例。 >>> from timeit import * >>> t1 = Timer('L[5000]', 'L=range(10000)') >>> t2 = Timer('L[5000]', 'L=list(range(10000))') >>> t1.timeit() 0.61441663675145719 >>> t2.timeit() 0.1539030798605836 3.…

compact_number_listのパフォーマンス

とりあえずテスト結果の傾向のみメモ。 昨日のcompact_number_listをインデクシングを使ったリスト版とイテレータ版の時間を比較していたが、短いリストだとインデクシングの方が速いが、長いリストになるとイテレータの方が速い。compact_number_listではch…

再帰の考え方

まず例を見てみよう。 for i in range(10): print i 上記の例では、iの状態を0から9まで変えながらループしている。ここで、1つのループをフレームと呼ぶことにする。次に再帰のコード例を見てみる。 def fib(n): if n==0 or n==1: return 1 else: return fi…

リストの先読み

リストを先読みするには以下のようにイテレータを複製して、ポインタを必要な分だけ進めておく。そして並列に回す。 >>> from itertools import * >>> xs = range(7) >>> xs1 = chain(xs, [None, None]) >>> xs1, xs2, xs3 = tee(xs1, 3) >>> xs2.next() 0 >…

メモ

Develogger: codecsで使えるエンコーディング (http://www.r-stone.net/blogs/satoshi/2008/02/codecs.html) Pythonのcodecsで使用できるエンコーディングは「encodings」モジュールにあるようです。 ... WindowsXPでは「C:\Python25\Lib\encodings」になり…

メモ

compact-number-list (3) (http://d.hatena.ne.jp/morchin/20081006#p1) ファイル処理などのイテレータで先読みする場合にteeを使うとうまくいきそうなので、そのアイデアでcompact-number-listの拡張版の問題を時間あるときにパフォーマンスも含めて研究し…