用語集
******

">>>"
   インタラクティブシェルにおけるデフォルトの Python プロンプトです。
   インタプリタでインタラクティブに実行されるコード例でよく出てきます
   。

"..."
   インタラクティブシェルにおいて、インデントされたコードブロック、対
   応する左右の区切り文字の組 (丸括弧()、角括弧[]、波括弧{}、三重引用
   符) の内側、デコレーターの後に、コードを入力する際に表示されるデフ
   ォルトの Python プロンプトです。

2to3
   Python 2.x のコードを Python 3.x のコードに変換するツールです。ソー
   スコードを解析してその解析木を巡回(traverse)することで検知できる、
   非互換性の大部分を処理します。

   2to3 は標準ライブラリの "lib2to3" として利用できます。単体のツール
   としての使えるスクリプトが "Tools/scripts/2to3" として提供されてい
   ます。 2to3 - Python 2 から 3 への自動コード変換 を参照してください
   。

abstract base class
   (抽象基底クラス) *abstract-base-classes* は *duck-typing* を補完す
   るもので、 "hasattr()" などの別のテクニックでは不恰好になる場合に
   インタフェースを定義する方法を提供します。 Pythonは沢山のビルトイン
   ABCsを、("collections" モジュールで)データ構造、 ("numbers" モジュ
   ールで)数値型、("io" モジュールで)ストリーム型で 提供いています。
   "abc" モジュールを利用して独自のABCを作成することもできます。

argument
   関数を呼び出す際に、 *function* (または *method*) に渡す値です。引
   数には２種類あります。

   * *キーワード引数*: 関数呼び出しの際に引数の前に識別子がついたも
     の (例: "name=") や、 "**" に続けた辞書の中の値として渡された引数
     。 例えば、次の "complex()" の呼び出しでは、 "3" と "5" がキーワ
     ード 引数です:

        complex(real=3, imag=5)
        complex(**{'real': 3, 'imag': 5})

   * *位置引数*: キーワード引数以外の引数。位置引数は引数リストの先
     頭 に書くことができ、また "*" に続けた *iterable* の要素として渡
     すこ とができます。例えば、次の例では "3" と "5" は両方共位置引数
     です:

        complex(3, 5)
        complex(*(3, 5))

   実引数は関数の実体において名前付きのローカル変数に割り当てられます
   。割り当てを行う規則については 呼び出し (call) を参照してください。
   シンタックスにおいて実引数を表すためにあらゆる式を使うことが出来ま
   す。評価された値はローカル変数に割り当てられます。

   *仮引数*、FAQ の 実引数と仮引数の違いは何ですか? を参照してください
   。

attribute
   (属性) オブジェクトに関連付けられ、ドット表記式によって名前で参照さ
   れる値です。例えば、オブジェクト *o* が属性 *a* を持っているとき、
   その属性は *o.a* で参照されます。

BDFL
   慈悲深き終身独裁者 (Benevolent Dictator For Life) の略です。Python
   の作者、Guido van Rossum のことです。

bytes-like object
   (バイト様オブジェクト) "str"、"bytearray" や "memoryview" といった
   buffer protocol をサポートするオブジェクトです。バイト様オブジェク
   トは圧縮、バイナリーデータの保存、ソケット経由の送信等の様々な操作
   に用いることが出来ます。操作によってはバイナリーデータはミューテー
   ブルでなくてはなりませんが、その場合全てのバイト様オブジェクトを用
   いることが出来るわけではありません。

bytecode
   (バイトコード) Python のソースコードはバイトコードへとコンパイルさ
   れます。バイトコードは Python プログラムの CPython インタプリタ内部
   での表現です。バイトコードはまた、 ".pyc" や ".pyo" ファイルにキャ
   ッシュされ、同じファイルの実行が二度目にはより高速になります (ソー
   スコードからバイトコードへの再度のコンパイルは回避されます)。このバ
   イトコードは、各々のバイトコードに対応するサブルーチンを呼び出すよ
   うな "仮想機械(*virtual machine*)" で動作する "中間言語
   (intermediate language)" といえます。重要な注意として、バイトコード
   は異なる Python 仮想マシン間で動作することは期待されていませんし、
   Python リリース間で安定でもありません。

   バイトコードの命令一覧は dis モジュール にあります。

class
   (クラス) ユーザー定義オブジェクトを作成するためのテンプレートです。
   クラス定義は普通、そのクラスのインスタンス上の操作をするメソッドの
   定義を含みます。

classic class
   (旧スタイルクラス) "object" を継承していないクラス全てを指します。
   新スタイルクラス(*new-style class*) も参照してください。 旧スタイル
   クラスは Python 3 で削除されます。

coercion
   (型強制) 同じ型の2つの引数を要する演算の最中に、ある型のインスタン
   スを別の型に暗黙のうちに変換することです。 例えば、 "int(3.15)" は
   浮動小数点数を整数の "3" にします。 しかし、 "3+4.5" の場合、各引数
   は型が異なっていて(一つは整数、一つは浮動小数点数)、 加算をする前に
   同じ型に変換しなければいけません。そうでないと、 "TypeError" 例外が
   投げられます。 2つの被演算子間の型強制は組み込み関数の "coerce" を
   使って行えます。 従って、 "3+4.5" は "operator.add(*coerce(3,
   4.5))" を呼び出すことに等しく、 "operator.add(3.0, 4.5)" という結果
   になります。 型強制を行わない場合、たとえ互換性のある型であっても、
   すべての引数はプログラマーが、 単に "3+4.5" とするのではなく、
   "float(3)+4.5" というように、同じ型に正規化しなければいけません。

complex number
   (複素数) よく知られている実数系を拡張したもので、すべての数は実部と
   虚部の和として表されます。虚数は虚数単位 ("-1" の平方根) に実数を掛
   けたもので、一般に数学では "i" と書かれ、工学では "j" と書かれます
   。Python は複素数に組み込みで対応し、後者の表記を取っています。虚部
   は末尾に "j" をつけて書きます。例えば "3+1j" です。 "math" モジュー
   ルの複素数版を利用するには、 "cmath" を使います。複素数の使用はかな
   り高度な数学の機能です。必要性を感じなければ、ほぼ間違いなく無視し
   てしまってよいでしょう。

context manager
   (コンテキストマネージャ) "with" 文で扱われる、"__enter__()" と
   "__exit__()" メソッドを定義することで環境を制御するオブジェクトです
   。**PEP 343** を参照してください。

CPython
   python.org で配布されている、Python プログラミング言語の標準的な実
   装です。"CPython" という単語は、この実装を Jython や IronPython と
   いった他の実装と区別する必要が有る場合に利用されます。

decorator
   (デコレータ) 別の関数を返す関数で、通常、 "@wrapper" 構文で関数変換
   として適用されます。デコレータの一般的な利用例は、 "classmethod()"
   と "staticmethod()" です。

   デコレータの文法はシンタックスシュガーです。次の2つの関数定義は意味
   的に同じものです:

      def f(...):
          ...
      f = staticmethod(f)

      @staticmethod
      def f(...):
          ...

   同じ概念がクラスにも存在しますが、あまり使われません。デコレータに
   ついて詳しくは、 関数定義 および クラス定義 のドキュメントを参照し
   てください。

descriptor
   (デスクリプタ) メソッド "__get__()", "__set__()", あるいは
   "__delete__()" が定義されている *新スタイル (new-style)* のオブジェ
   クトです。 あるクラス属性がデスクリプタである場合、その属性を参照す
   るときに、 そのデスクリプタに束縛されている特別な動作を呼び出します
   。 通常、get,set,deleteのために *a.b* と書くと、 *a* のクラス辞書内
   でオブジェクト *b* を検索しますが、 *b* がデスクリプタの場合にはデ
   スクリプタで定義された メソッドを呼び出します。 デスクリプタの理解
   は、 Python を深く理解する上で鍵となります。 というのは、デスクリプ
   タこそが、関数、メソッド、プロパティ、 クラスメソッド、静的メソッド
   、そしてスーパクラスの参照といった多くの機能の基盤だからです。

   デスクリプタのメソッドに関して詳しくは、 デスクリプタ (descriptor)
   の実装 を参照してください。

dictionary
   (辞書) 任意のキーを値に対応付ける連想配列です。 "__hash__()" メソッ
   ドと "__eq__()" メソッドを実装した任意のオブジェクトをキーにできま
   す。 Perl ではハッシュ (hash) と呼ばれています。

dictionary view
   (ビュー) "dict.viewkeys()", "dict.viewvalues()", "dict.viewitems()"
   が返すオブジェクトを辞書ビュー (dictionary view) と呼びます。これら
   は辞書のエントリに対する動的なビューで、つまり辞書の変更されるとビ
   ューはそれら変更を反映します。辞書ビューを完全なリストにするには
   "list(dictview)" としてください。 辞書ビューオブジェクト を参照して
   ください。

docstring
   クラス、関数、モジュールの最初の式である文字列リテラルです。そのス
   イートの実行時には無視されますが、コンパイラによって識別され、その
   クラス、関数、モジュールの "__doc__" 属性として保存されます。イント
   ロスペクションできる（訳注: 属性として参照できる）ので、オブジェク
   トのドキュメントを書く標準的な場所です。

duck-typing
   あるオブジェクトが正しいインタフェースを持っているかを決定するのに
   オブジェクトの型を見ないプログラミングスタイルです。代わりに、単純
   にオブジェクトのメソッドや属性が呼ばれたり使われたりします。（「ア
   ヒルのように見えて、アヒルのように鳴けば、それはアヒルである。」）
   インタフェースを型より重視することで、上手くデザインされたコードは
   、ポリモーフィックな代替を許して柔軟性を向上させます。ダックタイピ
   ングは "type()" や "isinstance()" による判定を避けます。 (ただし、
   ダックタイピングを *抽象基底クラス* で補完することもできます。) そ
   の代わり、典型的に "hasattr()" 判定や *EAFP* プログラミングを利用し
   ます。

EAFP
   「認可をとるより許しを請う方が容易  (easier to ask for forgiveness
   than permission、マーフィーの法則)」の略です。この Python で広く使
   われているコーディングスタイルでは、通常は有効なキーや属性が存在す
   るものと仮定し、その仮定が誤っていた場合に例外を捕捉します。この簡
   潔で手早く書けるコーディングスタイルには、 "try" 文および "except"
   文がたくさんあるのが特徴です。このテクニックは、C のような言語でよ
   く使われている *LBYL* スタイルと対照的なものです。

expression
   (式) 何かの値に評価される、一つづきの構文(a piece of syntax). 言い
   換えると、リテラル、名前、属性アクセス、演算子や関数呼び出しといっ
   た、 値を返す式の要素の組み合わせ。 他の多くの言語と違い、Pythonは
   言語の全ての構成要素が式というわけではありません。 "print" や "if"
   のように、式にはならない、文(*statement*) もあります。代入も式では
   なく文です。

extension module
   (拡張モジュール) C や C++ で書かれたモジュールで、Python の C API
   を利用して Python コアやユーザーコードとやりとりします。

file object
   (ファイルオブジェクト) 下位のリソースへのファイル志向 API ("read()"
   や "write()" メソッドを持つもの) を公開しているオブジェクトです。フ
   ァイルオブジェクトは、作成された手段によって、実際のディスク上のフ
   ァイルや、その他のタイプのストレージや通信デバイス (例えば、標準入
   出力、インメモリバッファ、ソケット、パイプ、等) へのアクセスを媒介
   できます。ファイルオブジェクトは *file-like objects* や *streams*
   とも呼ばれます。

   ファイルオブジェクトには3つの種類があります: 生のバイナリーファイル
   、バッファされたバイナリーファイル、そしてテキストファイルです。 こ
   れらのインターフェースは "io" モジュール内で定義されています。 ファ
   イルオブジェクトを作成する標準的な方法は "open()" 関数を利用するこ
   とです。

file-like object
   *file object* と同義です。

finder
   モジュールの *loader* を探すオブジェクト。 "find_module()" という名
   前のメソッドを実装していなければなりません。 詳細については **PEP
   302** を参照してください。

floor division
   一番近い小さい整数に丸める数学除算。floor division 演算子は "//" で
   す。例えば、 "11 // 4" は "2" になり、 float の true division の結
   果 "2.75" と異なります。 "(-11) // 4" は "-2.75" を *小さい方に* 丸
   めるので "-3" になることに注意してください。 **PEP 238** を参照して
   ください。

関数
   (関数) 呼び出し側に値を返す一連の文のことです。関数には0以上の *実
   引数* を渡すことが出来ます。実体の実行時に引数を使用することが出来
   ます。 *仮引数*、*メソッド*、関数定義 を参照してください。

__future__
   互換性のない新たな機能を現在のインタプリタで有効にするためにプログ
   ラマが 利用できる擬似モジュールです。例えば、式 "11/4" は現状では
   "2" になります。この式を実行しているモジュールで

      from __future__ import division

   を行って *真の除算操作 (true division)* を有効にすると、式 "11/4"
   は "2.75" になります。実際に "__future__" モジュールを import して
   その変数を評価すれば、新たな機能が初めて追加されたのがいつで、 いつ
   デフォルトの機能になる予定かわかります。

      >>> import __future__
      >>> __future__.division
      _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)

garbage collection
   (ガベージコレクション) それ以上使われなくなったメモリを解放する処理
   です。Pythonは、参照カウントと、循環参照を見つけて破壊する循環ガベ
   ージコレクタと、を使ってガベージコレクションを行います。

generator
   A function which returns an iterator.  It looks like a normal
   function except that it contains "yield" statements for producing a
   series of values usable in a for-loop or that can be retrieved one
   at a time with the "next()" function. Each "yield" temporarily
   suspends processing, remembering the location execution state
   (including local variables and pending try-statements).  When the
   generator resumes, it picks up where it left off (in contrast to
   functions which start fresh on every invocation).

generator expression
   (ジェネレータ式) イテレータを返す式です。普通の式に、ループ変数を定
   義する "for" 式、範囲、そして省略可能な "if" 式がつづいているように
   見えます。こうして構成された式は、外側の関数に向けて値を生成します:

      >>> sum(i*i for i in range(10))         # sum of squares 0, 1, 4, ... 81
      285

GIL
   *global interpreter lock* を参照してください。

global interpreter lock
   (グローバルインタプリタロック) *CPython* インタプリタが利用している
   、一度に Python のバイトコード(*bytecode*) 実行するスレッドは一つだ
   けであることを保証する仕組みです。これにより ("dict" などの重要な組
   み込み型を含む) などのオブジェクトモデルが同時アクセスに対して暗黙
   的に安全になるので、 CPython の実装がシンプルになります。インタプリ
   タ全体をロックすることで、マルチプロセッサマシンが生じる並列化のコ
   ストに対して、楽にインタプリタをマルチスレッド化できます。

   ただし、標準あるいは外部のいくつかの拡張モジュールは、圧縮やハッシ
   ュ計算などの計算の重い処理をするときに GIL を解放するように設計され
   ています。また、I/O 処理をするときも GIL は常に解放されます。

   過去に "自由なマルチスレッド化" したインタプリタ (供用されるデータ
   を細かい粒度でロックする) が開発されましたが、一般的なシングルプロ
   セッサの場合のパフォーマンスが悪かったので成功しませんでした。この
   パフォーマンスの問題を克服しようとすると、実装がより複雑になり保守
   コストが増加すると考えられています。

hashable
   (ハッシュ可能) *ハッシュ可能* なオブジェクトとは、生存期間中変わら
   ないハッシュ値を持ち ("__hash__()" メソッドが必要)、他のオブジェク
   トと比較ができる ("__eq__()" か "__cmp__()" メソッドが必要) オブジ
   ェクトです。 同値なハッシュ可能オブジェクトは必ず同じハッシュ値を持
   つ必要があります。

   ハッシュ可能なオブジェクトは辞書のキーや集合のメンバーとして使えま
   す。辞書や集合のデータ構造は内部でハッシュ値を使っているからです。

   Python のイミューテーブルな組み込みオブジェクトはハッシュ可能ですが
   、ミューテーブルなコンテナ (例えばリストや辞書) はハッシュ不可能で
   す。ユーザー定義のクラスのインスタンスであるようなオブジェクトはデ
   フォルトでハッシュ可能です。それらは全て非等価を比較し (自身を除い
   て)、ハッシュ値は "id()" より得られます。

IDLE
   Python の統合開発環境 (Integrated DeveLopment Environment) です。
   IDLE は Python の標準的な配布に同梱されている基本的な機能のエディタ
   とインタプリタ環境です。

immutable
   (イミュータブル) 固定の値を持ったオブジェクトです。イミュータブルな
   オブジェクトには、数値、文字列、およびタプルなどがあります。これら
   のオブジェクトは値を変えられません。別の値を記憶させる際には、新た
   なオブジェクトを作成しなければなりません。イミュータブルなオブジェ
   クトは、固定のハッシュ値が必要となる状況で重要な役割を果たします。
   辞書のキーがその例です。

integer division
   (整数除算) 剰余を考慮しない数学的除算です。例えば、式 "11/4" は現状
   では "2.75" ではなく "2" になります。これは *切り捨て除算 (floor
   division)* とも呼ばれます。 二つの整数間で除算を行うと、結果は (端
   数切捨て関数が適用されて)  常に整数になります。 しかし、被演算子の
   一方が ("float" のような) 別の数値型の場合、 演算の結果は共通の型に
   型強制されます (型強制(*coercion*)参照)。 例えば、浮動小数点数で整
   数を除算すると結果は浮動小数点になり、 場合によっては端数部分を伴い
   ます。 "//" 演算子を "/" の代わりに使うと、整数除算を強制できます。
   *__future__* も参照してください。

importing
   あるモジュールの Python コードが別のモジュールの Python コードで使
   えるようにする処理です。

importer
   モジュールを探してロードするオブジェクト。 *finder* と *loader* の
   どちらでもあるオブジェクト。

interactive
   (対話的) Python には対話的インタプリタがあり、文や式をインタプリタ
   のプロンプトに入力すると即座に実行されて結果を見ることができます。
   "python" と何も引数を与えずに実行してください。(コンピュータのメイ
   ンメニューから Pythonの対話的インタプリタを起動できるかもしれません
   。) 対話的インタプリタは、新しいアイデアを試してみたり、モジュール
   やパッケージの中を覗いてみる("help(x)" を覚えておいてください) のに
   非常に便利なツールです。

interpreted
   Python はインタプリタ形式の言語であり、コンパイラ言語の対極に位置し
   ます。 (バイトコードコンパイラがあるために、この区別は曖昧ですが。)
   ここでのインタプリタ言語とは、ソースコードのファイルを、まず実行可
   能形式にしてから実行させるといった操作なしに、直接実行できることを
   意味します。インタプリタ形式の言語は通常、コンパイラ形式の言語より
   も開発／デバッグのサイクルは短いものの、プログラムの実行は一般に遅
   いです。対話的(*interactive*)も参照してください。

iterable
   (反復可能オブジェクト) 要素を一つずつ返せるオブジェクトです。反復可
   能オブジェクトの例には、("list", "str", "tuple" といった) 全てのシ
   ーケンス型や、 "dict" や "file" といった幾つかの非シーケンス型、 あ
   るいは "__iter__()" か "__getitem__()" メソッドを実装したクラスのイ
   ンスタンスが含まれます。反復可能オブジェクトは "for" ループ内やその
   他多くのシーケンス (訳注: ここでのシーケンスとは、シーケンス型では
   なくただの列という意味)が必要となる状況 ("zip()", "map()", ...) で
   利用できます。反復可能オブジェクトを組み込み関数 "iter()" の引数と
   して渡すと、 オブジェクトに対するイテレータを返します。 このイテレ
   ータは一連の値を引き渡す際に便利です。 反復可能オブジェクトを使う際
   には、通常 "iter()" を呼んだり、 イテレータオブジェクトを自分で扱う
   必要はありません。 "for" 文ではこの操作を自動的に行い、無名の変数を
   作成してループの間イテレータを記憶します。 イテレータ(*iterator*)
   シーケンス(*sequence*), およびジェネレータ(*generator*)も参照してく
   ださい。

iterator
   (イテレータ) データの流れを表現するオブジェクトです。イテレータの
   "next()" メソッドを繰り返し呼び出すと、流れの中の要素を一つずつ返し
   ます。データがなくなると、代わりに "StopIteration" 例外を送出します
   。その時点で、イテレータオブジェクトは尽きており、それ以降は
   "next()" を何度呼んでも "StopIteration" を送出します。イテレータは
   、そのイテレータオブジェクト自体を返す "__iter__()" メソッドを実装
   しなければならないので、イテレータは他の iterable を受理するほとん
   どの場所で利用できます。はっきりとした例外は複数の反復を行うような
   コードです。 ("list" のような) コンテナオブジェクトは、自身を
   "iter()" 関数にオブジェクトに渡したり "for" ループ内で使うたびに、
   新たな未使用のイテレータを生成します。これをイテレータで行おうとす
   ると、前回のイテレーションで使用済みの同じイテレータオブジェクトを
   単純に返すため、空のコンテナのようになってしまします。

   詳細な情報は イテレータ型 にあります。

key function
   (キー関数) キー関数、あるいは照合関数とは、ソートや順序比較のための
   値を返す呼び出し可能オブジェクト(callable)です。例えば、
   "locale.strxfrm()" をキー関数に使えば、ロケール依存のソートの慣習に
   のっとったソートキーを返します。

   Python には、キー関数を受け付けて要素がどのように順序付けられたりグ
   ループ化されたりするかを制御するような、いくつかのツールがあります
   。例えば、 "min()", "max()", "sorted()", "list.sort()",
   "heapq.nsmallest()", "heapq.nlargest()", "itertools.groupby()" です
   。

   キー関数を作る方法はいくつかあります。例えば、 "str.lower()" メソッ
   ドをキー関数として使って大文字小文字を区別しないソートができます。
   他には、"lambda" 式を使って "lambda r: (r[0], r[2])" のようなアドホ
   ックなキー関数を作ることができます。また、 "operator" モジュールは
   "attrgetter()", "itemgetter()", "methodcaller()" というキー関数コン
   ストラクタを提供しています。キー関数の作り方、使い方に関する例は、
   Sorting HOW TO を参照してください。

keyword argument
   *実引数* を参照してください。

lambda
   (ラムダ) 無名のインライン関数で、関数が呼び出されたときに評価される
   1 つの式 (*expression*) を含みます。ラムダ関数を作る構文は "lambda
   [parameters]: expression" です。

LBYL
   「ころばぬ先の杖 (look before you leap)」 の略です。このコーディン
   グスタイルでは、呼び出しや検索を行う前に、明示的に前提条件 (pre-
   condition) 判定を行います。 *EAFP* アプローチと対照的で、 "if" 文が
   たくさん使われるのが特徴的です。

   マルチスレッド化された環境では、LBYL アプローチは "見る" 過程と "飛
   ぶ" 過程の競合状態を引き起こすリスクがあります。例えば、"if key in
   mapping: return mapping[key]" というコードは、判定の後、別のスレッ
   ドが探索の前に *mapping* から *key* を取り除くと失敗します。この問
   題は、ロックするか EAFP アプローチを使うことで解決できます。

list
   (リスト) Python の組み込みのシーケンス (*sequence*) です。リストと
   いう名前ですが、リンクリストではなく、他の言語で言う配列 (array) と
   同種のもので、要素へのアクセスは O(1) です。

list comprehension
   (リスト内包表記) シーケンス内の全てあるいは一部の要素を処理して、そ
   の結果からなるリストを返す、 コンパクトな書き方です。 "result =
   ["0x%02x" % x for x in range(256) if x % 2 == 0]" とすると、 0 から
   255 までの偶数を 16進数表記 (0x..) した文字列からなるリストを生成し
   ます。 "if" 節はオプションです。 "if" 節がない場合、 "range(256)"
   の全ての要素が処理されます。

loader
   モジュールをロードするオブジェクト。 "load_module()" という名前のメ
   ソッドを定義していなければなりません。 詳細は **PEP 302** を参照し
   てください。

magic method
   An informal synonym for *special method*.

mapping
   (マップ、マッピング) 任意のキーに対する検索をサポートしていて、
   "Mapping" か "MutableMapping" の *抽象基底クラス* を実装しているコ
   ンテナオブジェクト。 例えば、 "dict", "collections.defaultdict",
   "collections.OrderedDict", "collections.Counter" はマップ型です。

metaclass
   (メタクラス) クラスのクラスです。クラス定義は、クラス名、クラスの辞
   書と、基底クラスのリストを作ります。メタクラスは、それら 3 つを引数
   として受け取り、クラスを作る責任を負います。ほとんどのオブジェクト
   指向言語は(訳注:メタクラスの)デフォルトの実装を提供しています。
   Python が特別なのはカスタムのメタクラスを作成できる点です。ほとんど
   のユーザーに取って、メタクラスは全く必要のないものです。しかし、一
   部の場面では、メタクラスは強力でエレガントな方法を提供します。たと
   えば属性アクセスのログを取ったり、スレッドセーフ性を追加したり、オ
   ブジェクトの生成を追跡したり、シングルトンを実装するなど、多くの場
   面で利用されます。

   詳細は クラス生成をカスタマイズする を参照してください。

method
   (メソッド) クラス本体の中で定義された関数。そのクラスのインスタンス
   の属性として呼び出された場合、メソッドはインスタンスオブジェクトを
   第一引数 (*argument*) として受け取ります (この第一引数は通常 "self"
   と呼ばれます)。 *関数* と *ネストされたスコープ* も参照してください
   。

method resolution order
   (メソッド解決順序) 探索中に基底クラスが構成要素を検索される順番です
   。 2.3 以降の Python インタープリタが使用するアルゴリズムの詳細につ
   いては The Python 2.3 Method Resolution Order を参照してください。

モジュール
   (モジュール) Python コードの組織単位としてはたらくオブジェクトです
   。モジュールは任意の Python オブジェクトを含む名前空間を持ちます。
   モジュールは *importing* の処理によって Python に読み込まれます。

   *パッケージ* を参照してください。

MRO
   *method resolution order* を参照してください。

mutable
   (ミュータブル) ミュータブルなオブジェクトは、 "id()" を変えることな
   く値を変更できます。イミュータブル (*immutable*) も参照してください
   。

named tuple
   (名前付きタプル) タプルに似ていて、インデクス指定できる要素に名前付
   き属性でもアクセス出来るクラスです (例えば、 "time.localtime()" は
   タプルに似たオブジェクトを返し、その *year* には "t[0]" のようなイ
   ンデクスによるアクセスと、 "t.tm_year" のような名前付き要素としての
   アクセスが可能です)。

   名前付きタプルには、 "time.struct_time" のような組み込み型もありま
   すし、通常のクラス定義によって作成することもできます。名前付きタプ
   ルを "collections.namedtuple()" ファクトリ関数で作成することもでき
   ます。最後の方法で作った名前付きタプルには自動的に、
   "Employee(name='jones', title='programmer')" のような自己ドキュメン
   ト表現 (self-documenting representation) などの機能が付いてきます。

namespace
   (名前空間) 変数を記憶している場所です。 名前空間は辞書を用いて実装
   されています。 名前空間には、ローカル、グローバル、組み込み名前空間
   、そして (メソッド内の) オブジェクトのネストされた名前空間がありま
   す。 例えば、関数 "__builtin__.open()" と "os.open()" は名前空間で
   区別されます。 名前空間はまた、ある関数をどのモジュールが実装してい
   るかをはっきりさせることで、 可読性やメンテナンス性に寄与します。
   例えば、 "random.seed()", "itertools.izip()" と書くことで、これらの
   関数がそれぞれ "random" モジュールや "itertools" モジュールで実装さ
   れていることがはっきりします。

nested scope
   (ネストされたスコープ) 外側で定義されている変数を参照する機能。 具
   体的に言えば、ある関数が別の関数の中で定義されている場合、内側の関
   数は外側の関数中の変数を参照できます。ネストされたスコープからは変
   数の参照だけができ、外側の変数を変更できないことに注意してください
   。それは常に最も内側のスコープに対する書き込みになります。 対照的に
   、ローカル変数は最も内側のスコープ内の読み書き両方します。同様に、
   グローバル変数を使うとグローバル名前空間の値を読み書きします。

new-style class
   (新スタイルクラス) "object" から継承したクラス全てを指します。これ
   には "list" や "dict" のような全ての組み込み型が含まれます。
   "__slots__()", デスクリプタ、プロパティ、 "__getattribute__()" とい
   った、 Python の新しい機能を使えるのは新スタイルクラスだけです。

   より詳しい情報は 新スタイルと旧スタイル を参照してください。

object
   (オブジェクト) 状態 (属性や値) と定義された振る舞い (メソッド) をも
   つ全てのデータ。もしくは、全ての新スタイルクラス (*new-style
   class*) の究極の基底クラスのこと。

package
   (パッケージ) サブモジュールや再帰的にサブパッケージを含むことの出来
   る *module* のことです。専門的には、パッケージは "__path__" 属性を
   持つ Python オブジェクトです。

parameter
   (仮引数) 名前付の実体でterm:*関数<function>* (やterm:*メソッド
   <method>*) の定義において関数が受ける *実引数* を明示します。仮引数
   には4種類あります:

   * *位置またはキーワード*: *位置* でまたは *キーワード引数* として
     渡 すことができる引数を指定します。これはたとえば以下の *foo* や
     *bar* のように、デフォルトの仮引数の種類です:

        def func(foo, bar=None): ...

   * *位置専用*: 位置によってのみ与えられる引数を指定します。Python
     に 位置専用仮引数を定義する文法はありません。しかし、組み込み関数
     に は位置専用仮引数を持つもの (例: "abs()") があります。

   * *可変長位置*: (他の仮引数で既に受けられた任意の位置引数に加えて
     ) 任意の個数の位置引数が与えられることを指定します。このような仮
     引 数は、以下の *args* のように仮引数名の前に "*" をつけることで
     定義 できます:

        def func(*args, **kwargs): ...

   * *可変長キーワード*: (他の仮引数で既に受けられた任意のキーワード
     引 数に加えて) 任意の個数のキーワード引数が与えられることを指定し
     ま す。このような仮引数は、上の例の *kwargs* のように仮引数名の前
     に "**" をつけることで定義できます。

   仮引数はオプションと必須の引数のどちらも指定でき、オプションの引数
   にはデフォルト値も指定できます。

   *argument* 、FAQ の 実引数と仮引数の違いは何ですか? 、関数定義 を参
   照してください。

PEP
   Python Enhancement Proposal. A PEP is a design document providing
   information to the Python community, or describing a new feature
   for Python or its processes or environment. PEPs should provide a
   concise technical specification and a rationale for proposed
   features.

   PEPs are intended to be the primary mechanisms for proposing major
   new features, for collecting community input on an issue, and for
   documenting the design decisions that have gone into Python. The
   PEP author is responsible for building consensus within the
   community and documenting dissenting opinions.

   See **PEP 1**.

位置引数
   *実引数* を参照してください。

Python 3000
   Python 3.x リリースラインのニックネームです。(Python 3 が遠い将来の
   話だった頃に作られた言葉です。) "Py3k" と略されることもあります。

Pythonic
   他の言語で一般的な考え方で書かれたコードではなく、Python の特に一般
   的なイディオムに従った考え方やコード片。例えば、Python の一般的なイ
   ディオムでは "for" 文を使ってイテラブルのすべての要素に渡ってループ
   します。他の多くの言語にはこの仕組みはないので、Python に慣れていな
   い人は代わりに数値のカウンターを使うかもしれません:

      for i in range(len(food)):
          print food[i]

   これに対し、きれいな Pythonic な方法は:

      for piece in food:
          print piece

reference count
   (参照カウント) あるオブジェクトに対する参照の数。参照カウントが0に
   なったとき、そのオブジェクトは破棄されます。参照カウントは通常は
   Python のコード上には現れませんが、 *CPython* 実装の重要な要素です
   。 "sys" モジュールは、プログラマーが任意のオブジェクトの参照カウン
   トを知るための "getrefcount()" 関数を提供しています。

__slots__
   新スタイルクラス(*new-style class*)内で、インスタンス属性の記憶に
   必要な領域をあらかじめ定義しておき、それとひきかえにインスタンス辞
   書を排除して メモリの節約を行うための宣言です。 これはよく使われる
   テクニックですが、正しく動作させるのには少々手際を要するので、 例え
   ばメモリが死活問題となるようなアプリケーション内にインスタンスが大
   量に 存在するといった稀なケースを除き、使わないのがベストです。

sequence
   (シーケンス) 特殊メソッド "__getitem__()" で整数インデックスによる
   効率的な要素へのアクセスを サポートし、 "len()" で長さを返すような
   反復可能オブジェクト(*iterable*)です。 組み込みシーケンス型には、
   "list", "str", "tuple", "unicode" などがあります。 "dict" は
   "__getitem__()" と "__len__()" もサポートしますが、 検索の際に任意
   の変更不能(*immutable*)なキーを使うため、シーケンスではなく マップ
   (mapping) とみなされているので注意してください。

slice
   (スライス) 多くの場合、シーケンス(*sequence*)の一部を含むオブジェク
   ト。 スライスは、添字記号 "[]" で数字の間にコロンを書いたときに作ら
   れます。 例えば、 "variable_name[1:3:5]" です。 添字記号は "slice"
   オブジェクトを内部で利用しています。 (もしくは、古いバージョンの、
   "__getslice__()" と "__setslice__()" を利用します。)

special method
   (特殊メソッド) ある型に特定の操作、例えば加算をするために Python か
   ら暗黙に呼び出されるメソッド。この種類のメソッドは、メソッド名の最
   初と最後にアンダースコア 2 つがついています。特殊メソッドについては
   特殊メソッド名 で解説されています。

statement
   (文) 文はスイート (コードの"ブロック") に不可欠な要素です。文は *式
   * かキーワードから構成されるもののどちらかです。後者には "if"、
   "while"、"for" があります。

struct sequence
   A tuple with named elements. Struct sequences expose an interface
   similiar to *named tuple* in that elements can be accessed either
   by index or as an attribute. However, they do not have any of the
   named tuple methods like "_make()" or "_asdict()". Examples of
   struct sequences include "sys.float_info" and the return value of
   "os.stat()".

triple-quoted string
   (三重クォート文字列) 3つの連続したクォート記号(")かアポストロフィー
   (')で囲まれた文字列。通常の(一重)クォート文字列に比べて表現できる文
   字列に違いはありませんが、幾つかの理由で有用です。1つか2つの連続し
   たクォート記号をエスケープ無しに書くことができますし、行継続文字(\)
   を使わなくても複数行にまたがることができるので、ドキュメンテーショ
   ン文字列を書く時に特に便利です。

型
   (型) Python オブジェクトの型はオブジェクトがどのようなものかを決め
   ます。あらゆるオブジェクトは型を持っています。オブジェクトの型は
   "__class__" 属性でアクセスしたり、"type(obj)" で取得したり出来ます
   。

universal newlines
   テキストストリームの解釈法の一つで、以下のすべてを行末と認識します:
   Unix の行末規定 "'\n'"、Windows の規定 "'\r\n'"、古い Macintosh の
   規定 "'\r'"。利用法について詳しくは、 **PEP 278** と **PEP 3116**
   、さらに "str.splitlines()" も参照してください。

virtual environment
   （仮想環境）協調的に切り離された実行環境です。これにより Python ユ
   ーザとアプリケーションは同じシステム上で動いている他の Python アプ
   リケーションの挙動に干渉することなく Python パッケージのインストー
   ルと更新を行うことができます。

virtual machine
   (仮想マシン) 完全にソフトウェアにより定義されたコンピュータ。
   Python の仮想マシンは、バイトコードコンパイラが出力したバイトコード
   (*bytecode*) を実行します。

Zen of Python
   (Pythonの悟り) Python を理解し利用する上での導きとなる、Python の設
   計原則と哲学をリストにしたものです。対話プロンプトで ""import
   this"" とするとこのリストを読めます。
