- >>>
- インタラクティブシェルにおける、デフォルトのPythonプロンプト。インタラクティブに実行されるコードサンプルとしてよく出てきます。
- ...
- インタラクティブシェルにおける、インデントされたコードブロックや対応する括弧(丸括弧()、角括弧[]、curly brace{})の内側で表示されるデフォルトのプロンプト。
- 2to3
Python 2.x のコードを Python 3.x のコードに変換するツール。ソースコードを解析して、その解析木を巡回(traverse)して、非互換なコードの大部分を処理する。
2to3 は、 lib2to3 モジュールとして標準ライブラリに含まれています。スタンドアローンのツールとして使うときのコマンドは Tools/scripts/2to3
として提供されています。 2to3 - Python 2 から 3 への自動コード変換 を参照してください。
- abstract base class
- (抽象基底クラス) ABCs - abstract base classes は duck-typing
を補完するもので、 hasattr() などの別のテクニックでは不恰好になる場合にインタフェースを定義する方法を提供します。
Pythonは沢山のビルトインABCsを、(collections モジュールで)データ構造、
(numbers モジュールで)数値型、(io モジュールで)ストリーム型で提供いています。
abc モジュールを利用して独自のABCを作成することもできます。
- argument
(引数)
関数やメソッドに渡された値。関数の中では、名前の付いたローカル変数に代入されます。
関数やメソッドは、その定義中に位置指定引数(positional arguments, 訳注: f(1, 2)
のように呼び出し側で名前を指定せず、引数の位置に引数の値を対応付けるもの)
とキーワード引数(keyword arguments, 訳注: f(a=1, b=2) のように、引数名に引数の値を対応付けるもの)の両方を持つことができます。位置指定引数とキーワード引数は可変長です。関数定義や呼び出しは、 * を使って、不定数個の位置指定引数をシーケンス型に入れて受け取ったり渡したりすることができます。同じく、キーワード引数は ** を使って、辞書に入れて受け取ったり渡したりできます。
引数リスト内では任意の式を使うことができ、その式を評価した値が渡されます。
- attribute
- (属性)
オブジェクトに関連付けられ、ドット演算子を利用して名前で参照される値。例えば、オブジェクト o が属性 a を持っているとき、その属性は
o.a で参照されます。
- BDFL
- 慈悲ぶかき独裁者 (Benevolent Dictator For Life) の略です。
Python の作者、 Guido van Rossum
のことです。
- bytecode
(バイトコード)
Pythonのソースコードはバイトコードへとコンパイルされます。バイトコードはPythonプログラムのインタプリタ内部での形です。バイトコードはまた、 .pyc や .pyo ファイルにキャッシュされ、同じファイルを二度目に実行した際により高速に実行できるようにします
(ソースコードからバイトコードへの再度のコンパイルは回避されます)。このバイトコードは、各々のバイトコードに対応するサブルーチンを呼び出すような
“仮想計算機(virtual machine)” で動作する “中間言語 (intermediate language)” といえます。
バイトコードの命令一覧は dis モジュール
にあります。
- class
- (クラス)
ユーザー定義オブジェクトを作成するためのテンプレート。クラス定義は普通、そのクラスのインスタンス上の操作をするメソッドの定義を含みます。
- classic class
- (旧スタイルクラス)
object を継承していないクラス全てを指します。新スタイルクラス(new-style class) も参照してください。旧スタイルクラスはPython 3.0で削除されます。
- 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(...):
...
デコレータについてのより詳しい情報は、
the documentation for function definition
を参照してください。
- descriptor
- (デスクリプタ)
メソッド __get__(), __set__(), あるいは __delete__()
が定義されている 新スタイル (new-style) のオブジェクトです。あるクラス属性がデスクリプタである場合、その属性を参照するときに、そのデスクリプタに束縛されている特別な動作を呼び出します。通常、get,set,deleteのために a.b と書くと、 a のクラス辞書内でオブジェクト
b を検索しますが、 b がデスクリプタの場合にはデスクリプタで定義されたメソッドを呼び出します。デスクリプタの理解は、 Python を深く理解する上で鍵となります。というのは、デスクリプタこそが、関数、メソッド、プロパティ、クラスメソッド、静的メソッド、そしてスーパクラスの参照といった多くの機能の基盤だからです。
- dictionary
- (辞書)
任意のキーを値に対応付ける連想配列です。
__hash__() メソッドと __eq__() メソッドを実装した任意のオブジェクトをキーにできます。
Perl ではハッシュ(hash)と呼ばれています。
- docstring
- クラス、関数、モジュールの最初の式となっている文字列リテラルです。実行時には無視されますが、コンパイラによって識別され、そのクラス、関数、モジュールの __doc__ 属性として保存されます。イントロスペクションできる(訳注: 属性として参照できる)ので、オブジェクトのドキュメントを書く正しい場所です。
- duck-typing
- あるオブジェクトが正しいインタフェースを持っているかどうかを確かめるのにオブジェクトの型をチェックしないプログラミングスタイル。代わりに、シンプルにオブジェクトのメソッドが呼ばれたり属性が使われたりします。(「もしそれがアヒルのようにみえて、ガチョウのように鳴けば、それはアヒルである」)インタフェースを型より重視することで、上手くデザインされたコードは
(polymorphicな置換を許可することによって)柔軟性を増すことができます。
duck-typing は type() や isinstance() を避けます。
(ただし、duck-typing を抽象ベースクラス(abstract base class)で補完することもできます。)
その代わりに 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のコアとやりとりするために、
PythonのC APIを利用します。
- file object
内部リソースに対してファイル由来の API (read() や write() のようなメソッド) を持つオブジェクト。作成された方法に応じて、ファイルオブジェクトはディスクや他のストレージ上のファイルやコミュニュケーション機器
(例えば標準入出力、メモリ上のバッファ、ソケット、パイプなど)
に対するアクセスを仲介します。ファイルオブジェクトは file-like object やストリームなどと呼ばれます。
ファイルオブジェクトには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 を参照してください。
- function
- (関数)
呼び出し側に値を返す、一連の文。ゼロ個以上の引数を受け取り、それを関数の本体を実行するときに諒できます。
argument や method も参照してください。
- __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は、Pythonは参照カウントと循環参照を見つけて破壊する循環参照コレクタを使ってガベージコレクションを行います。
- generator
- (ジェネレータ)
イテレータを返す関数です。通常の関数に似ていますが、 return 文を使わず、代わりに
for ループで使ったり next() 関数で1つずつ取り出せる値の列を生成するために yield 文を使います。
yield 文に到達するたびに関数の実行は実行状態(ローカル変数や実行中の try 文などを含む)を保存して中断されます。ジェネレータが再開されるとき、(通常の関数が実行の度に初期状態から開始するのに対して)中断した状態から実行を開始します。
- 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 の全ての不変(immutable)なビルドインオブジェクトはハッシュ可能です。リストや辞書といった変更可能なコンテナ型はハッシュ可能ではありません。
ユーザー定義クラスのインスタンスはデフォルトでハッシュ可能です。それらは、比較すると常に不等で、ハッシュ値は id() になります。
- IDLE
- Python の組み込み開発環境 (Integrated DeveLopment Environment) です。
IDLE は Pythonの標準的な配布物についてくる基本的な機能のエディタとインタプリタ環境です。
- immutable
- (不変オブジェクト)
固定の値を持ったオブジェクトです。変更不能なオブジェクトには、数値、文字列、およびタプルなどがあります。これらのオブジェクトは値を変えられません。別の値を記憶させる際には、新たなオブジェクトを作成しなければなりません。不変オブジェクトは、固定のハッシュ値が必要となる状況で重要な役割を果たします。辞書におけるキーがその例です。
- integer division
- (整数除算)
剰余を考慮しない数学的除算です。例えば、式 11/4 は現状では 2.75 ではなく
2 になります。これは 切り捨て除算 (floor division) とも呼ばれます。二つの整数間で除算を行うと、結果は (端数切捨て関数が適用されて) 常に整数になります。しかし、被演算子の一方が (float のような) 別の数値型の場合、演算の結果は共通の型に型強制されます (型強制(coercion)参照)。例えば、浮動小数点数で整数を除算すると結果は浮動小数点になり、場合によっては端数部分を伴います。 // 演算子を
/ の代わりに使うと、整数除算を強制できます。
__future__ も参照してください。
- 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
一連のデータ列 (stream) を表現するオブジェクトです。イテレータの next() メソッドを繰り返し呼び出すと、データ列中の要素を一つずつ返します。後続のデータがなくなると、データの代わりに StopIteration 例外を送出します。その時点で、イテレータオブジェクトは全てのオブジェクトを出し尽くしており、それ以降は next() を何度呼んでも StopIteration を送出します。イテレータは、そのイテレータオブジェクト自体を返す __iter__()
メソッドを実装しなければならなくなっており、そのため全てのイテレータは他の反復可能オブジェクトを受理できるほとんどの場所で利用できます。著しい例外は複数の反復を行うようなコードです。
(list のような) コンテナオブジェクトでは、 iter()
関数にオブジェクトを渡したり、 for ループ内で使うたびに、新たな未使用のイテレータを生成します。このイテレータをさらに別の場所でイテレータとして使おうとすると、前回のイテレーションパスで使用された同じイテレータオブジェクトを返すため、空のコンテナのように見えます。
より詳細な情報は イテレータ型 にあります。
- key function
(キー関数)
キー関数、あるいは照合関数とは、ソートや順序比較のための値を返す呼び出し可能オブジェクト(callable)です。例えば、 locale.strxfrm() をキー関数に使えば、ロケール依存のソートの慣習にのっとったソートキーを返します。
Python には要素がどのように順序付けられたりグループ化されたりするかを制御するためにキー関数を受け付けるいくつかのツールがあります。例えば、 min(), max(), sorted(), list.sort(),
heapq.nsmallest(), heapq.nlargest(), itertools.groupby()
です。
キー関数を作る方法がいくつかあります。例えば、 str.lower() メソッドをキー関数として使って大文字小文字を区別しないソートができます。
(訳注: インスタンスメソッドはクラス経由でアクセスすると関数にもなります。この例では、 'FOO'.lower() と str.lower('FOO') が同じになる事を利用しています。)
他には、アドホックにキー関数を作るために lambda r: (r[0], r[2])
のように lambda 式を使うことができます。また、 operator モジュールは attrgetter(),
itemgetter(), methodcaller() というキー関数コンストラクタを提供いしています。キー関数の作り方、使い方に関する例は、 Sorting HOW TO
を参照してください。
- keyword argument
- (キーワード引数)
呼び出し時に、 variable_name= が手前にある引数。変数名は、その値が関数内のどのローカル変数に渡されるかを指定します。キーワード引数として辞書を受け取ったり渡したりするために **
を使うことができます。 argument も参照してください。
- lambda
- (ラムダ)
無名のインライン関数で、関数が呼び出されたときに評価される1つの式
(expression) を持ちます。ラムダ関数を作る構文は、 lambda [arguments]: expression です。
- LBYL
- 「ころばぬ先の杖」 (look before you leap) の略です。このコーディングスタイルでは、呼び出しや検索を行う前に、明示的に前提条件
(pre-condition) 判定を行います。
EAFP アプローチと対照的で、 if 文がたくさん使われるのが特徴的です。
- 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 を参照してください。
- mapping
- (マップ、マッピング)
任意のキーに対する検索をサポートしていて、 Mapping か MutableMapping
の 抽象基底クラス を実装しているコンテナオブジェクト。例えば、 dict, collections.defaultdict, collections.OrderedDict,
collections.Counter はマップ型です。
- metaclass
- (メタクラス)
クラスのクラスです。クラス定義は、クラス名、クラスの辞書と、基底クラスのリストを作ります。メタクラスは、それら3つを引数として受け取り、クラスを作る責任を負います。ほとんどのオブジェクト指向言語は(訳注:メタクラスの)デフォルトの実装を提供しています。
Pythonはカスタムのメタクラスを作成できる点が特別です。ほとんどのユーザーに取って、メタクラスは全く必要のないものです。しかし、一部の場面では、メタクラスは強力でエレガントな方法を提供します。たとえば属性アクセスのログを取ったり、スレッドセーフ性を追加したり、オブジェクトの生成を追跡したり、シングルトンを実装するなど、多くの場面で利用されます。
- method
- クラス内で定義された関数。クラス属性として呼び出された場合、メソッドはインスタンスオブジェクトを第一引数(argument) として受け取ります(この第一引数は普段
self と呼ばれます)。
function と nested scope も参照してください。
- method resolution order
- メソッド解決順序 (Method Resolution Order) はメンバの探索時の基底クラスの探索順序です。
Python 2.3 の Method Resolution Order を参照して下さい。
- 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)
の基底クラスのこと。
- positional argument
- (位置指定引数)
引数のうち、呼び出すときの順序で、関数やメソッドの中のどの名前に代入されるかが決定されるもの。複数の位置指定引数を、関数定義側が受け取ったり、渡したりするために、
* を使うことができます。
argument も参照してください。
- Python 3000
- Pythonの次のメジャーバージョンである Python 3.0 のニックネームです。
(Python 3 が遠い将来の話だった頃に作られた言葉です。)
“Py3k” と略されることもあります。
- Pythonic
他の言語で一般的な考え方で書かれたコードではなく、Python の特に一般的なイディオムに繋がる、考え方やコード。例えば、Python の一般的なイディオムに iterable の要素を 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
- (文)
文は一種のコードブロックです。文は expression か、それ以外のキーワードにより構成されます。例えば if, while, print は文です。
- triple-quoted string
- (三重クォート文字列)
3つの連続したクォート記号(”)かアポストロフィー(‘)で囲まれた文字列。通常の(一重)クォート文字列に比べて表現できる文字列に違いはありませんが、幾つかの理由で有用です。
1つか2つの連続したクォート記号をエスケープ無しに書くことができますし、行継続文字(\)を使わなくても複数行にまたがることができるので、ドキュメンテーション文字列を書く時に特に便利です。
- type
- (型)
Python のオブジェクトの型は、そのオブジェクトの種類を決定します。全てのオブジェクトは型を持っています。オブジェクトの型は、 __class__ 属性からアクセスしたり、
type(obj) で取得することができます。
- view
- (ビュー)
dict.viewkeys(), dict.viewvalues(), dict.viewitems()
が返すオブジェクトのことを辞書ビュー(dictionary view)と呼びます。これらはベースとなる辞書の変更を反映する、遅延シーケンスです。辞書ビューを完全なリストにするには list(dictview) としてください。
辞書ビューオブジェクト を参照してください。
- virtual machine
- (仮想マシン)
ソフトウェアにより定義されたコンピュータ。
Python の仮想マシンは、バイトコードコンパイラが出力したバイトコード
(bytecode)を実行します。
- Zen of Python
- (Pythonの悟り)
Python を理解し利用する上での導きとなる、Python の設計原則と哲学をリストにしたものです。対話プロンプトで “import this” とするとこのリストを読めます。