2008-09-02から1日間の記事一覧

リストの内包表記

リストのリテラルの中だけ特殊な表記ができる。 [x ** 2 for x in (1, 2, 3)] # [1, 4, 9]になる これをやるとループの結果がリストになる。 つまり1, 2, 3が順番にxに入って、それがforの左に書かれた式でそれぞれ2乗され、順番にリストに格納されていくと…

コンパイル

Pythonのスクリプトは直接実行されるファイル以外は一度コンパイルされてファイルができるそうだ。evalする時もコンパイルされるらしいけど、ファイルができるかどうかは未確認。

制御構文

else ifはPythonだとelif。Rubyだとelsifなので注意が必要。 whileにelseがあるのが面白い。はじめからループしない条件の時に実行される。ごくまれに役立ちそうだ。 try〜exceptにもelseがあって、これは例外が発生しなかった時に実行される。どんな時にも…

演算子のオーバーロード

Pythonではすべての演算子がオーバーロード可能だ。でも演算子全部といいながら単項演算子は無かったような気がする。 # pythonのうろ覚えで書いた動作確認してないコード class X: def __init__(self): self.value = 0 def __add__(self, a): self.value +=…

変数とオブジェクト あとlambda

pythonの変数はオブジェクトを参照するだけで値は持たない。その点は別に珍しくない。 でも関数やメソッドの名前は実は変数で、関数やメソッドが代入されている。Rubyでもクラスが定数に代入されてたりしたけど、pythonはもっと徹底しているわけだ。 # pytho…

タプル、リスト、ディクショナリ

タプルというのは耳慣れないけど、要は不変なリストで、引数を複数渡したり返したりするときに知らないうちに使われていたりする。Rubyだと全部配列にしていたけど、Pythonではリストと別にタプルが用意されている上に、リテラルまで別に用意されている。 (1…

ビルトインクラス

文字列とかリストとかはよくあるスクリプト言語と似たようなもの。Rubyと比べて特に違うのは文字列が不変だということ。Javaみたいに不変。だから破壊的メソッドのようなものはない。 あと基本的にメソッドはselfを返さないので、Rubyみたく # ruby a = [2, …

インデント

まず一番重要なのはやっぱりインデント。スコープはインデントが揃った範囲になるので、C系の言語みたいに{}でくくるとかも、DelphiやRubyみたいにendを付けるとかもいらない。これは特定のスタイルを要求するので堅苦しいのかと思っていたけど、インデント…

Python

Google App Engineを試そうと思ってとりあえす『初めてのPython』を読み始めて3日目。構文のところはだいたい読み終えたのでPythonがどんな感じなのか、主にRubyと比較しながら整理してみる。 構文だけみるとそう悪くないかもと思えてきた。Rubyとは違う部分…