プログラミング言語

特徴

  • インタプリタ言語(実行時、中間言語へコンパイルしたファイルを残す。)
  • オブジェクト指向
  • 弱い型付き
  • ファイルがモジュール単位
  • モジュール単位で名前空間が自動的にできる。Foo.py を作ると自動的に名前空間 Foo となる。
  • 変数宣言は不要。ただし、代入しないで使用するとエラー。(要するに代入=宣言)
  • インデントはタブとスペース。タブは8桁スペースと同義。インデント数が違うと違うブロックとみなされる。よってブロックの始端終端の印はない。
  • クラスの強制はない。モジュールにいきなり関数が書ける。
  • 配列に相当するものはリストである。リストは可変長になっている。先頭から0基点のインデックスでアクセスできる。
    >>> a = ['a', 2, 'c']
    >>> a[0]
    'a'
    >>> a[1]
    2
    >>> a[2]
    'c'
  • C/Java などでの switch 文相当のものはない。
  • C/Java などでの do-while 文相当のものはない。
  • GIL (Global Interpreter Lock, あるいは Giant Interpreter Lock) のため、マルチコアではあまり威力を発揮しないことがある。
    • ライブラリがスレッドセーフではないので、仕方なくインタプリタが排他ロックして1スレッドのみを動かす仕組み。
    • Python 2.6 から multiprocessing パッケージがある。

感想

  • 命名ルールが結構いい加減。
    • 大文字小文字、単語区切りとかの統一性がない。
    • 標準モジュール名はほぼ全部小文字。
    • 関数名などもほぼ小文字。単語間にアンダーバーを入れたり入れなかったり不安定。
  • ファイル=モジュール名なので、Windows のように大文字小文字を判定しないファイルシステムからすると、全部小文字は合理的かもしれない。
  • ドキュメントがかなり良くできている。チュートリアルを読めばたいてい困らないだろう。日本で流行らない理由は ruby があるせいか。
  • 文法的にはかなりいい感じ。

一覧

モジュールと名前空間

  • ファイル=モジュールで、名前空間はモジュールで分離されている。
  • import しなければ他モジュールはアクセスできない。
  • "import モジュール名" と "from モジュール名 import メンバ名" ってのは混乱の元だと思う。最初につまづいた。
  • import モジュール名 の場合、モジュール名.メンバ名 でしかアクセスできない。よって名前は衝突しない。
  • from モジュール名 import メンバ名 の場合、メンバ名で直接アクセスできるようになる。import での指定によっては名前の衝突の可能性がある。

メモ

モジュールのソースを更新したのに、反映されない。モジュールのアンロード方法は?

  • import した場合、Python 実行環境内に記憶されてしまう。
  • ソースを更新しても、自動検出はされない。
  • reload() 組み込み関数を使ってリロードする必要がある。
    • reload を実行するスクリプトは、そのモジュールを import している必要がある。
      import foomodule
      import hoge.gero
      reload(foomodule)
      reload(hoge.gero)
      • import していないと、name '...' is not defined というエラーになる。
    • reload で指定するモジュール名は "" で囲まない点に注意。
  • from ... import ... は、定義をコピーするので、リロードの影響を受けない。
    • 再度 from を実行して再定義するか、そもそも import を使うようにする。

from Module import * のアスタリスクは使わない。常に明示する。

  • 問題
    • すべての名前がインポートされてしまうので、名前の衝突で予期せぬ動作を起こす場合がある。衝突検出はしてくれない。後勝ち。

Foo.py

def test():
	print "foo"

Bar.py

def test():
	print "bar"

User.py

from Foo import *
from Bar import *

test()

結果

bar

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-01-09 (土) 11:28:30 (244d)