用語集

>>>

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

...

インタラクティブシェルにおいて、インデントされたコードブロックや、対応する括弧 (丸括弧()、角括弧[]、波括弧{}) の内側で、コードを入力する際に表示されるデフォルトの Python プロンプトです。

2to3

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

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

abstract base class

(抽象基底クラス) 抽象基底クラスは duck-typing を補完するもので、 hasattr() などの別のテクニックでは不恰好であったり微妙に誤る (例えば magic methods の場合) 場合にインタフェースを定義する方法を提供します。ABC は仮想 (virtual) サブクラスを導入します。これは親クラスから継承しませんが、それでも isinstance()issubclass() に認識されます; abc モジュールのドキュメントを参照してください。Python には、多くの組み込み ABC が同梱されています。その対象は、(collections.abc モジュールで) データ構造、(numbers モジュールで) 数、(io モジュールで) ストリーム、(importlib.abc モジュールで) インポートファインダ及びローダーです。 abc モジュールを利用して独自の ABC を作成できます。

引数

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

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

    complex(real=3, imag=5)
    complex(**{'real': 3, 'imag': 5})
    
  • 位置引数: キーワード引数以外の引数。位置引数は引数リストの先頭に書くことができ、また * に続けた iterable の要素として渡すことができます。例えば、次の例では 35 は両方共位置引数です。

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

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

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

属性

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

BDFL

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

binary file

bytes-like object を読み書き出来る file object

参考

text filestr オブジェクトを読み書きする。

bytes-like object

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

バイトコード

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

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

class

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

coercion

(型強制) 同じ型の 2 引数を伴う演算の最中に行われる、ある型のインスタンスの別の型への暗黙の変換です。例えば、 int(3.15) は浮動小数点数を整数 3 に変換します。しかし 3+4.5 では、各引数は型が異なり(一つは整数、一つは浮動小数点数)、加算をする前に同じ型に変換できなければ TypeError 例外が投げられます。型強制がなかったら、すべての引数は、たとえ互換な型であっても、単に 3+4.5 ではなく float(3)+4.5 というように、プログラマーが同じ型に正規化しなければいけません。

complex number

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

コンテキストマネージャ

(コンテキストマネージャ) 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__() を定義しているオブジェクトです。あるクラス属性がデスクリプタであるとき、属性探索によって、束縛されている特別な動作が呼び出されます。通常、get,set,deleteのために a.b と書くと、 a のクラス辞書内でオブジェクト b を検索しますが、 b がデスクリプタであればそれぞれのデスクリプタメソッドが呼び出されます。デスクリプタの理解は、 Python を深く理解する上で鍵となります。というのは、デスクリプタこそが、関数、メソッド、プロパティ、クラスメソッド、静的メソッド、そしてスーパクラスの参照といった多くの機能の基盤だからです。

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

dictionary

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

docstring

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

duck-typing

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

EAFP

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

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

拡張モジュール

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

file object

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

ファイルオブジェクトには実際には 3 種類あります: 生の バイナリーファイル、バッファされた バイナリーファイル、そして テキストファイル<text file>`です。インターフェイスは :mod:`io モジュールで定義されています。ファイルオブジェクトを作る標準的な方法は open() 関数を使うことです。

file-like object

file object と同義です。

finder

モジュールの loader を探すオブジェクト。 find_loader() あるいは find_module() という名前のメソッドを実装していなければなりません。 詳細については PEP 302PEP 420 を参照してください。また、 abstract base class については importlib.abc.Finder を参照してください。

floor division

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

関数

(関数) 呼び出し側に値を返す一連の文のことです。関数には0以上の:term:実引数 <argument>`を渡すことが出来ます。引数は実体の実行時に使用されるかもしれません。:term:`仮引数<parameter>メソッド関数定義 を参照してください。

function annotation

(関数アノテーション) 関数の引数や返り値に関連付けられる任意のメタデータです。シンタックスは 関数定義 で述べられています。アノテーションは関数オブジェクトの __annotations__ 属性からアクセスすることが出来ます。

Python 自体は、関数の注釈には任意の特定の意味を割り当てません。それらは、サードパーティ製のライブラリやツールにより割り振られます。その潜在的な用途のいくつかが説明されていますので、: pep: ‘ 3107’を参照してください。

__future__

互換性のない新たな言語機能を現在のインタプリタで有効にするためにプログラマが利用できる擬似モジュールです。

__future__ モジュールを import してその変数を評価すれば、新たな機能が初めて追加されたのがいつで、いつ言語デフォルトの機能になるかわかります:

>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
ガベージコレクション

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

generator

(ジェネレータ) イテレータを返す関数です。通常の関数に似ていますが、代わりに 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 は常に解放されます。

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

ハッシュ可能

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

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

All of Python’s immutable built-in objects are hashable, while no mutable containers (such as lists or dictionaries) are. Objects which are instances of user-defined classes are hashable by default; they all compare unequal (except with themselves), and their hash value is their id().

IDLE

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

変更不能

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

import path

path based finder が import するモジュールを検索する場所 (または path entry) のリスト。 import 中、このリストは通常 sys.path から来ますが、サブパッケージの場合は親パッケージの __path__ 属性からも来ます。

importing

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

importer

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

interactive

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

interpreted

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

iterable
An object capable of returning its members one at a time. Examples of iterables include all sequence types (such as list, str, and tuple) and some non-sequence types like dict, file objects, and objects of any classes you define with an __iter__() or __getitem__() method. Iterables can be used in a for loop and in many other places where a sequence is needed (zip(), map(), ...). When an iterable object is passed as an argument to the built-in function iter(), it returns an iterator for the object. This iterator is good for one pass over the set of values. When using iterables, it is usually not necessary to call iter() or deal with iterator objects yourself. The for statement does that automatically for you, creating a temporary unnamed variable to hold the iterator for the duration of the loop. See also iterator, sequence, and generator.
イテレータ

(イテレータ) データの流れを表現するオブジェクトです。イテレータの __next__() メソッドを繰り返し呼び出す (または組み込み関数 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

argument を参照してください。

lambda

(ラムダ) 無名のインライン関数で、関数が呼び出されたときに評価される 1 つの式 (expression) を含みます。ラムダ関数を作る構文は lambda [arguments]: 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 = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0] とすると、 0 から 255 までの偶数を 16進数表記 (0x..) した文字列からなるリストを生成します。 if 節はオプションです。 if 節がない場合、 range(256) の全ての要素が処理されます。

loader

モジュールをロードするオブジェクト。 load_module() という名前のメソッドを定義していなければなりません。ローダーは一般的に finder から返されます。詳細は PEP 302 を、 abstract base class については importlib.abc.Loader を参照してください。

マップ

(マッピング) 任意のキー探索をサポートしていて、 MappingMutableMapping抽象基底クラス で指定されたメソッドを実装しているコンテナオブジェクトです。例えば、 dict, collections.defaultdict, collections.OrderedDict, collections.Counter などです。

meta path finder

sys.meta_path の検索によって返されるfinder。 Meta path finders は path entry finders と関係していますが、それとは異なるものです。

metaclass

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

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

method

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

method resolution order

メソッド解決順序は、探索の際に基底クラスが構成要素を検索される順番です。 The Python 2.3 Method Resolution Order を参照してください。

モジュール

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

package を参照してください。

MRO

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

変更可能

(ミュータブル) ミュータブルなオブジェクトは、 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) などの機能が付いてきます。

名前空間

(名前空間) 変数が格納される場所です。名前空間は辞書として実装されます。名前空間にはオブジェクトの (メソッドの) 入れ子になったものだけでなく、局所的、大域的、そして組み込みのものがあります。名前空間は名前の衝突を防ぐことによってモジュール性をサポートする。例えば関数 builtins.openos.open() は名前空間で区別されている。また、どのモジュールが関数を実装しているか明示することによって名前空間は可読性と保守性を支援する。例えば、random.seed()itertools.islice() と書くと、それぞれモジュール randomitertools で実装されていることが明らかである。

namespace package

(名前空間パッケージ) サブパッケージのコンテナとして提供される PEP 420 package 。Namespace package はおそらく物理表現を持たず、 __init__.py ファイルがないため、 regular package と異なります。

module を参照してください。

nested scope

(ネストされたスコープ) 外側で定義されている変数を参照する機能です。例えば、ある関数が別の関数の中で定義されている場合、内側の関数は外側の関数中の変数を参照できます。ネストされたスコープはデフォルトでは変数の参照だけができ、変数の代入はできないので注意してください。ローカル変数は、最も内側のスコープで変数を読み書きします。同様に、グローバル変数を使うとグローバル名前空間の値を読み書きします。 nonlocal で外側の変数に書き込めます。

new-style class
Old name for the flavor of classes now used for all class objects. In earlier Python versions, only new-style classes could use Python’s newer, versatile features like __slots__, descriptors, properties, __getattribute__(), class methods, and static methods.
object

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

package

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

regular packagenamespace package を参照してください。

parameter

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

  • positional-or-keyword: specifies an argument that can be passed either positionally or as a keyword argument. This is the default kind of parameter, for example foo and bar in the following:

    def func(foo, bar=None): ...
    
  • positional-only: specifies an argument that can be supplied only by position. Python has no syntax for defining positional-only parameters. However, some built-in functions have positional-only parameters (e.g. abs()).

  • keyword-only: specifies an argument that can be supplied only by keyword. Keyword-only parameters can be defined by including a single var-positional parameter or bare * in the parameter list of the function definition before them, for example kw_only1 and kw_only2 in the following:

    def func(arg, *, kw_only1, kw_only2): ...
    
  • var-positional: specifies that an arbitrary sequence of positional arguments can be provided (in addition to any positional arguments already accepted by other parameters). Such a parameter can be defined by prepending the parameter name with *, for example args in the following:

    def func(*args, **kwargs): ...
    
  • var-keyword: specifies that arbitrarily many keyword arguments can be provided (in addition to any keyword arguments already accepted by other parameters). Such a parameter can be defined by prepending the parameter name with **, for example kwargs in the example above.

Parameters can specify both optional and required arguments, as well as default values for some optional arguments.

See also the argument glossary entry, the FAQ question on the difference between arguments and parameters, the inspect.Parameter class, the 関数定義 section, and PEP 362.

path entry

path based finder が import するモジュールを探す import path 上の1つの場所

path entry finder

sys.path_hooks にある callable (path entry hook) が返した finder. 与えられた path entry にあるモジュールを見つける方法を知っている。

path entry hook

sys.path_hook リストにある callable で、指定された path entry にあるモジュールを見つける方法を知っている場合に path entry finder を返します。

path based finder

デフォルトの meta path finder の1つは、モジュールの import path を検索します。

portion

PEP 420 で定義されている、namespace package に属する、複数のファイルが (zipファイルに格納されている場合もある) 1つのディレクトリに格納されたもの。

固定引数

argument を参照してください。

provisional package

暫定 (provisional) パッケージは、標準ライブラリの後方互換性保証から計画的に除外されたものです。そのようなパッケージへの大きな変更は、暫定であるとされている間は期待されていませんが、コア開発者によって必要とみなされれば、後方非互換な変更 (パッケージの削除まで含まれる) が行われえます。このような変更はむやみに行われるものではありません – これはパッケージを組み込む前には見落とされていた重大な欠陥が露呈したときにのみ行われます。

このプロセスにより、標準ライブラリは問題となるデザインエラーに長い間閉じ込められることなく、時代を超えて進化を続けられます。詳細は PEP 411 を参照してください。

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)
qualified name

(修飾名) モジュールのグローバルスコープから、そのモジュールで定義されたクラス、関数、メソッドへの、 “パス” を表すドット名表記です。 PEP 3155 で定義されています。トップレベルの関数やクラスでは、修飾名はオブジェクトの名前と同じです:

>>> class C:
...     class D:
...         def meth(self):
...             pass
...
>>> C.__qualname__
'C'
>>> C.D.__qualname__
'C.D'
>>> C.D.meth.__qualname__
'C.D.meth'

モジュールへの参照で使われると、 完全修飾名 (fully qualified name) はすべての親パッケージを含む全体のドット名表記、例えば email.mime.text を意味します:

>>> import email.mime.text
>>> email.mime.text.__name__
'email.mime.text'
reference count

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

regular package

伝統的な、 __init__.py ファイルを含むディレクトリとしての package

namespace package を参照してください。

__slots__

クラス内での宣言で、インスタンス属性の領域をあらかじめ定義しておき、インスタンス辞書を排除することで、メモリを節約します。これはよく使われるテクニックですが、正しく扱うには少しトリッキーなので、稀なケース、例えばメモリが死活問題となるアプリケーションでインスタンスが大量に存在する、といったときを除き、使わないのがベストです。

sequence

(シーケンス) 整数インデクスによる効率的な要素アクセスを __getitem__() 特殊メソッドを通じてサポートし、長さを返す len() メソッドを定義した iterable です。 組み込みシーケンス型には、 list, str, tuple, bytes などがあります。 dict__getitem__()__len__() もサポートしますが、検索の際に整数ではなく任意の immutable なキーを使うため、シーケンスではなくマッピング (mapping) とみなされているので注意してください。

The collections.abc.Sequence abstract base class defines a much richer interface that goes beyond just __getitem__() and __len__(), adding count(), index(), __contains__(), and __reversed__(). Types that implement this expanded interface can be registered explicitly using register().

スライス

(スライス) 一般にシーケンス (sequence) の一部を含むオブジェクト。スライスは、添字表記 [] で与えられた複数の数の間にコロンを書くことで作られます。例えば、 variable_name[1:3:5] です。角括弧 (添字) 記号は slice オブジェクトを内部で利用しています。

special method

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

statement

(文) 文はスイート (コードの”ブロック”) に不可欠な要素です。文は:term:式<expression>`かキーワードから構成されるもののどちらかです。後者には:keyword:`ifwhilefor があります。

struct sequence

(構造体シーケンス) 名付けられた要素を持つタプルです。構造体シーケンスは named tuple と同じく、要素にインデクスでも属性でもアクセスできるインタフェースを公開します。しかし、名前付きタプルの _make()_asdict() のようなメソッドを持ちません。構造体シーケンスの例には、sys.float_info や、 os.stat() の返り値や、その他があります。

text file

(テキストファイル) 読み書きできる file object です。しばしば、テキストファイルは実際にバイト指向のデータストリームにアクセスし、テキストのエンコーディングを自動的に行います。

参考

binary file ファイルは bytes オブジェクトを読み書きします。

三重クオート文字列

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

type

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

universal newlines

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

view

(ビュー) dict.keys(), dict.values(), dict.items() が返すオブジェクトを辞書ビュー (dictionary view) と呼びます。これらはベースとなる辞書の変更を反映する、遅延シーケンスです。辞書ビューを完全なリストにするには list(dictview) としてください。 辞書ビューオブジェクト を参照してください。

virtual machine

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

Zen of Python

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