Python

リストの比較

id:Yoshiori said Python って list の中身が同じかどうか調べるのって何かやり方ある?? >>> a = [1, 2] >>> b = [2, 1] >>> a == b False これで True が返る方法 で、僕の返答: >>> set([1, 2]) == set([2, 1]) True 同じものが複数個あってその個数で区…

スライス

スライスを利用して要素を取り出す - snow-bellの日記これは例のaが数値のリストなので添字と値とで混乱するんじゃないかと思うんだ。例を変えてみよう。 >>> a = range(5) >>> a [0, 1, 2, 3, 4] >>> a[:3] [0, 1, 2] >>> a[3:] [3, 4] >>> a = 'abcde' >>>…

1つだけ1で残りが0であるような長さNのタプルの列挙

N = 3 print [ tuple(int(i == j) for i in range(N)) for j in range(N)] # -> [(1, 0, 0), (0, 1, 0), (0, 0, 1)]

weakref

知識としては知っていたが始めてweakrefが必要だと感じるシチュエーションにぶつかった。まずは短いコードで挙動を確認してみる。 from weakref import WeakValueDictionary class Foo(list): pass def make(): x = Foo([0]) y = Foo([1, x]) z = Foo([2, y]…

型の宣言をしてコンストラクタでassert

なんかJava的な頭で設計しているとこんなことを書きたくなったりするじゃない。「ヒットポイントは整数でー」と。実際にはPythonではこういう書き方はしないわけだけど。 class Monster(object): hitpoint = int defense = int attack = int で、コードをい…

sumはeagerかどうか

id:voluntasが「Erlangに移植するからHaskellのコードをわかりやすくPythonで書いて」と言ったので移植している。sumがeagerかどうか気になったので実験。 class Foo(object): def __init__(self, i): print "initialized %d" % i self.i = i def __add__(se…

generatorのclone

yieldを継続みたいに使いたいという話を聞いて、普通のgeneratorだと処理を進めたら戻れないから、戻るためには「処理途中のgenerator」をcloneして取っておく必要があるよなぁ、call/ccで現在の継続をとっておくみたいに。って思ってgeneratorをコピーする…

RubyのStruct

RubyのStruct irb(main):018:0> FooBar = Struct.new(:foo, :bar) => FooBar irb(main):019:0> FooBar.new(1, 2) => #<struct FooBar foo=1, bar=2> irb(main):020:0> _.foo => 1 へえー、これは便利。Pythonで作ってみた。 >>> def Struct(*keys): class _Struct(object): def __init__(</struct>…

zipの逆

zipの逆はunzipだろJK r0c zip() の逆をする関数は無いのだろうか http://twitter.com/r0c/statuses/794804246 というのはもちろん冗談。zipは二回適用するともとに戻る。 >>> zip([1, 2, 3], [4, 5, 6]) [(1, 4), (2, 5), (3, 6)] >>> zip(*_) [(1, 2, 3), …

arguments.callee

なんかarguments.calleeとかいうものが流行っているらしい。 Perl で JS の arguments.callee 的なことしようと思ってハマった - IT戦記 http://d.hatena.ne.jp/amachang/20080501/1209623634 はじめての coderepos で arguments::callee 初体験 - TAKESAKO…

地球の反対側で

> Both Van Rossum (Python) and Yukihiro Matsumoto (Python) got beards.Yup, they both invented Python at the exact same time on nearly opposite sides of the earth. http://blogs.microsoft.co.il/blogs/tamir/archive/2008/04/28/computer-languag…

SocketServerでソケットの再利用

SocketServer.ThreadingTCPServer.allow_reuse_address = True って書くと内部でソケットを作る際にSO_REUSEADDRをつけてくれるので、サーバ終了後即座にまた起動したときに「Addres already used」って怒られなくなる。僕は全部reuseでよかったので上のよう…

# -*- coding:utf8 -*-について

http://d.hatena.ne.jp/hamatsu1974/20080425/1209073114 「#」ってので始まってるとコメント行だったと思ったんだけど、コレがないとUnicode(UTF-8)が使えないっての、いきなり違和感を感じちゃ駄目なんでしょうかね? 「#-*-」と「-*-」ってのが何か特殊…

データファイルの頭の数行だけ読む

データファイルを作ったり、「たしかitertoolsだよな」ってところから目的のものを調べるところまで全部こみでpartty.orgした。 http://www.partty.org/session/head/2008/04/13/03/32/44ところでCtrl+Aで行頭に移動した後編集したときに行の内容が消えてし…

1024文字でBrainf*ckインタプリタ

もちろんワンライナーなのは言うまでもない。 Brainf*ckインタプリタを作る。ワンライナー化しようとしてバグを入れる。デバッグしようとしてデバッグプリントが原因でpartty.orgから切断される http://www.partty.org/session/make_bf_interpreter/2008/04/…

音を鳴らす方法

Macでコマンドラインからサウンド再生 | Weboo! Returns. http://yamashita.dyndns.org/blog/play-sounds-with-python-on-mac/ これを見て作った。 from AppKit import NSSound from time import sleep s = NSSound.alloc() filename = "/Users/nishio/tmp/m…

よくあるエラー

初心者が出しがちなエラーメッセージに関して、エラーメッセージが英語だからと読まずに飛ばす人が多いかと思って和訳をJython本に書いていたんだけど、どうせならここで公開して他に陥りがちなエラーメッセージの情報を集めた方がいいんじゃないかと思った…

web.pyで画像掲示板

ちょっと実験に必要だったので「画像をPOSTできて、それの一覧が表示されるサーバ」を作ってみました。これからもうちょっと新しい機能を入れるんだけども、今のシンプルな状態を公開しておく方が読みやすくていいのかなと思って貼ってみます。ちなみにもう…

ttyへの入力をフックしたい

termiosモジュールを使って改行が押されるまで待機しないようにする方法はわかった。 8.8 termios -- POSIX スタイルの端末制御 termios しかしPythonが入力を受け取っても詮ない。どうすればいいんだろう。bashをパイプで開いて、pythonが受け取った入力を…

pyswf

このきれいなSWFが http://www.swftools.org/flash/coltunnel.html 下の88行のPythonスクリプトでできている。 http://www.swftools.org/flash/coltunnel.py - 両方PythonだということでNodeBoxにSWFを吐かせるのも意外と簡単にいけるかも知れない…。

Pythonのif文を式にする

さっき光成さんにC++の変態的なコードの話を聞いていたらむらむらと変態的なことがしたくなってしまったので欲情にまかせて以下略 >>> class IF(object): def __call__(self, cond): class Cond(object): def then(self, f): if cond: class Result(object):…

なんと。改行コードがCRLFじゃ動かないのか。 SyntaxErrorになるからEmacsでC-Enter f unixで変換してみたら怒らなくなった。

メソッドの検索順序

Python2.3以降の新しいクラスは、メソッドの検索順序(MRO, Method Resolution Order)が「C3線形化」というアルゴリズムに変更されている。このアルゴリズムについて解説する。まずは実例。 >>> class A(object): x = "a" >>> class B(A): pass >>> class C(A…

__hash__がなくてもハッシュに入ることもある

http://d.hatena.ne.jp/morchin/20071130/p1 から。 >>> class Foo: pass >>> f = Foo() >>> d = {} >>> d[f] = 1 >>> d[f] 1 >>> hash(f) 32015344 >>> id(f) 32015344 ほおーー。 object.c内のhash部分のコードはこんな感じ: long PyObject_Hash(PyObject…

IPython

InstallationOSXLeopard - IPython http://ipython.scipy.org/moin/InstallationOSXLeopard なんかコンパイルに失敗するのでwgetでeggを落としてきて/Library/Python/2.5/site-packagesに置こう。wgetがないけどcurlがあったので使い方を調べてみた http://w…

staticmethodはmethodではなかった

あ…ありのまま 今 起こった事を話すぜ! 『staticmethodはmethodではなかった』 な… 何を言ってるのか わからねーと思うが おれも何でこうなっているのかわからなかった… 冗談はさておき >>> class Foo(object): def method(self, i): print i >>> Foo.metho…

角括弧で配列コピー

http://d.hatena.ne.jp/nishiohirokazu/20080219/1203435874これ、deep copyなのかshallow copyなのかという話。shallowなのでPythonで書けば # perl [ map { &func($foo, $_, $bar) } @{$baz->{quux}} ] は # python [func(foo, x, bar) for x in baz.quux]…

ブロックコメント

コードをつらつらと書いていると、一時的に実行しないでブロックをコメントアウトしたい時ってあるじゃないですか。ブロックコメントのないPythonでは三重引用符で囲んで文字列リテラルにしちゃうとかif 0:〜で無効化してしまうとかの手があるわけですけど、…

条件文の前の代入を取り除く

Pythonでは条件節の中に代入文を書くことができない。この制限は初心者が「代入と値が同じかどうかの比較を間違える」というありがちなミスをしてバグの原因になるのを防いでいる。が、しかしそのせいでif文の前で一時的な変数に値を代入しなければいけない…

Bloom filterのシンプルな実装

Bloom filterは指定されたものがリストに含まれるならばTrue、含まれないならばFalseを返すようなデータ構造である。もちろん、単純にリストを保持するだけでもリストに含まれるかどうかの判定は可能だが、Bloom filterのメリットはオリジナルのリストを保存…