« プロキシサーバ squid で、アクセス元を隠蔽 | データマイニング基礎 »

2008.07.16

Pythonにハマってきた…

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをnewsingに追加

ただいま、Pythonの本をバリバリと読書中。
脳内で「ああ、これは C言語 だとアレと同じだな」と翻訳しながら進めているけど、もし C言語 など他の言語を全く知らない人は大変だろうなぁと他人事のように感じてしまう。

また C言語 のような型をカッチリ決めてコーディングするのに慣れている人には、Pythonのような動的に型付けされる言語は違和感あるだろうなぁとも思う。
けど、アセンブラで組んだことがある人ならメモリサイズは気になるけど「型」なるものがある方が不思議で、メモリ空間にどう配置されているかがイメージできる人にとっては Python のような動的に型が変化する言語でも理解できる。

そういう意味では、様々な言語やハードウェアのちょっとした知識があると、理解の助けになるからお得だ。

以下、本を読んで他の言語と違うな~と感じたことをいくつか紹介。

Pythonには switch文 がない

アセンブラや組み込みC言語の経験者ならわかると思うけど、swicth文というのは内部では if などの条件分岐を応用していて、switch文は処理コストが大きい。
携帯の組み込みソフトを開発していた時は、switch文は禁止であったぐらいだ。禁止の理由は処理コストというよりも、switch文がバグの原因になりやすいからだったけど。

まあこれが理由ではないだろうけど、Pythonには switch文 が無いので if文 を使うことになる。
C言語にはない 辞書型 の変数もあるし、switch文が使えなくても全く問題にならないのが不思議。
他の言語ではよくswitch文を使ってたけどなぁ。

for文のループは回数指定ではない

あと、for文のループ表記も C言語 のようにループ回数を書くようなことはしない。

例えば C言語 の場合、

    for( i=0;i<10;i++ ){ … }

という書き方はよく見かけるけど、Pythonにはない。
Pythonでの for文 はPerlやPHPの foreach のように、ある変数について繰り返し実行させて使う。

例えば、number = [6,3,4] のように入っているリストがある場合、

    for item in number:

と書く。
ちょうど10回ループさせるなら、大げさに書くと

    number = [0,1,2,3,4,5,6,7,8,9]
    for item in number:

となる。まあさすがにこんな書き方をすることはなく、この場合は通常

    for item in range(10):

で良い。
range(10) というのは [0,1,2,3,4,5,6,7,8,9] を発生させる関数だ。

ブロック範囲はインデントで

他には、Pythonの特徴として真っ先に挙げられてもおかしくないのが、ループ処理などのブロックは {} で囲むのではなく、インデント(字数下げ)で表記すること。
インデントがブロック範囲を指定するので、誰が書いても同じようなプログラムになると言われている。

リストの中身に入れる値の「型」がバラバラでも良いのも面白い。

    a = [123,'hogehoge',False]

といった感じで、数値や文字列、Bool値などを一緒に入れられてしまう。
リストそのものをリストに入れることも可能だ。

Pythonは「ロジカル」にできている

言語は出来上がった背景や歴史を考えると興味深い。
アセンブラの開発効率の悪さがイヤになって、C言語のような人間がわかる「ルール」ができたんだと思う。
けどC言語のルールは、変数の型など不要な決め事まで作っちゃったから「それらを取っ払ってできたのが Python なのかな?」という気がする。

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>