Python♪用語集:モヤモヤを解消する明快な用語集

1.Pythonの用語集Top

Pythonの用語って難しいと思いませんか?カタカナが多いし、Pythonチュートリアル読めない!イテレータ?イテラブル?解説読んでもピンとこない!ネットで調べても、知りたいことが具体的にわからない。この用語集では、モヤモヤを解消する明快な用語集を目指します。例えば言葉の定義が「グレー」なものは「グレー」であると解説します。なお、同じ言葉でも、例えば「Python」と「Java」では定義が違うことがあります。 その場合、「python」での定義を解説します。

お知らせ

全ての用語を同じページに集約したら、重くなりすぎてしまいました。随時、解説を個別の記事に分け、動作を軽くする予定です。
索引において、用語の整理番号にリンクがあるものは、この記事内の解説位置にジャンプします。
用語にリンクが貼ってあるものは、新しく、個別の記事に移行した用語です。

2.索引

あ行か行さ行た行な行は行ま行や行ら行わ行a – z

あ行 用語集Topに戻る

浅いコピー [a0022]
イテラブル(iterable) [a0003]
イテレータ(iterator) [a0004]
イテレートする、イテレーション [a0013]
イミュータブル(immutable)変更不能体 [a0005]
インスタンス [a0044]
インタプリタ [a0012]
インタラクティブモード(対話モード) [a0007]
インタラクティブセッション [a0007]
インデント [a0049]
インプレース [a0024]
エスケープシーケンス [a0051]
エスケープ文字 [a0051]
オブジェクト、オブジェクト指向 [a0043]
親ディレクトリ [a0038]

か行 用語集Topに戻る

外部ライブラリ [a0046]
カレントディレクトリ [a0039]
カレントディレクトリのファイルの実行 [a0042]
関数 [a0045]
機械語(マシン語、マシンコード) [a0008]
クラス [a0044]
グローバルスコープ(Global Scope) [a0020]
グローバル変数 [a0020]
コマンドプロンプト [a0006]
コマンドライン [a0006]
コマンド [a0006] [a0007]
コメントアウト [a0050]
コード [a0010]
コンパイラ [a0012]

さ行 用語集Topに戻る

サブディレクトリ [a0037]
参照渡し [a0022]
シーケンス型 [a0002]
条件式 [a0033]
真偽値 [a0027]
真理値 [a0027]
スクリプト [a0007]
スクリプト言語 [a0014]
スクリプトファイル [a0007]
スコープ [a0017]
静的型付け言語 [a0016]
セカンダリプロンプト [a0006]
絶対パス [a0036]
相対パス [a0036]
ソースコード [a0008] [a0010]
ソースファイル [a0010]
ソースプログラム [a0011]
外側の関数のスコープ(Enclosing function’s scope) [a0019]

た行 用語集Topに戻る

対話モード(インタラクティブモード) [a0007]
動的型付け言語 [a0015]
中間コード [a0009]
短絡演算子 [a0032]
ディレクトリ [a0041]

な行 用語集Topに戻る

は行 用語集Topに戻る

パス(PATH) [a0036]
パス(PATH)を通す [a0042]
パッケージ [a0047]
反復可能体(iterable)イテラブル [a0003]
反復子(iterator)イテレータ [a0004]
比較演算子 [a0025]
否定(論理演算子)not [a0031]
標準ライブラリ [a0046]
ビルトインスコープ(Built-in scope ) [a0021]
深いコピー [a0022]
プライマリプロンプト [a0006]
ブーリアン [a0027]
ブール演算子 [a0028]
ブール値 [a0027]
プログラム [a0011]
プロンプト [a0006]
変更可能体(mutable)ミュータブル [a0005]
変更不能体(immutable)イミュータブル [a0005]
変数の再定義 [a0023]

ま行 用語集Topに戻る

ミュータブル(mutable)変更可能体 [a0005]
ミュータブルなシーケンス [a0034]
メソッド [a0045]
モジュール [a0048]

や行 用語集Topに戻る

ら行 用語集Topに戻る

ライブラリ [a0046]
リテラル(literal) [a0001]
ルートディレクトリ [a0040]
ローカルスコープ(Local scope) [a0018]
ローカル変数 [a0018]
論理演算 [a0026]
論理演算子 [a0028]
論理積 [a0029]
論理値 [a0027]
論理和 [a0030]

わ行 用語集Topに戻る

a – z 用語集Topに戻る

and(論理積) [a0029]
bool演算子 [a0028]
bool値 [a0027]
boolean [a0027]
DOSプロンプト [a0006]
MS-DOS [a0035]
MS-DOSプロンプト [a0006]
not(否定) [a0031]
NumPy配列のコピー [a0022]
or(論理和) [a0030]
PATH(パス) [a0036]
PATH(パス)を通す [a0042]

3.解説

[a0045]

「関数」「メソッド」

実際には「関数」と「メソッド」の区別はあいまいですが、実用上は以下のようなります。

モジュール内でdefによって定義されているものが「関数」です。一方、classの中のdefによって定義されている部分を、インスタンスで使用するとき、それを「メソッド」と呼びます。

Pythonのチュートリアルでは、「クラス」の説明の章で、以下のように説明されています。「メソッドという用語は~です。とはいえ、~として使うことにします」という、定義と運用を分けたあいまいな表現にとどめています。


メソッドとは、オブジェクトに “属している” 関数のことです。(Python では、メソッドという用語はクラスインスタンスだけのものではありません。オブジェクト型にもメソッドを持つことができます。例えば、リストオブジェクトには、 append, insert, remove, sort などといったメソッドがあります。とはいえ、以下では特に明記しない限り、クラスのインスタンスオブジェクトのメソッドだけを意味するものとして使うことにします。)

用語集Topに戻る

[a0044]

「クラス」「インスタンス」

Pythonはオブジェクト指向のプログラミング言語であり、オブジェクト指向のプログラミングをするためにクラスという仕組みを用意しています。クラスはオブジェクトの内部のデータや、内部のデータ(属性)を操作する方法(メソッド)を具体的に定義したものであり、オブジェクト作成の雛形(設計図)です。そして、クラスを元に作成したオブジェクトをインスタンスといい、同じクラスから複数のインスタンスを作ることが可能です。
インスタンスは、インスタンスの中に用意されたデータや、入力された具体的なデータを用いて、インスタンスのメソッドを実行することができます。

用語集Topに戻る

[a0043]

「オブジェクト指向」「オブジェクト」

オブジェクト指向とは、「継承」「ポリモーフィズム(多態性、多様性)」「カプセル化」といった手法を取り入れ、大規模なプログラム開発を効率的に行うことを目的とした考え方です。

オブジェクト指向の考え方のもと、カプセル化により、データや 内部のデータを操作する方法(メソッド)を ひとまとまりにしたものを「オブジェクト」といいます。

Pythonのクラスは、「継承」「ポリモーフィズム(多態性、多様性)」「カプセル化」 の機能を備えており、オブジェクト指向プログラミングを行う事ができます。

(1) 継承
クラスの「継承」により、元になるクラスの機能を拡張して別のクラスを作ることができます。
(2)ポリモーフィズム (多態性、多様性)
クラスのメソッドのオーバーライドにより、元になるクラスのメソッドを定義し直すことが可能であり、ポリモーフィズムを実現することができます。
(3)カプセル化
データ(属性)とデータを操作する方法(メソッド)をひとまとまりにすることを「カプセル化」という。なお、「カプセル化」する具体的な方法を示した設計図がクラスであり、その設計図をもとに、実際にデータを操作可能なオブジェクト(インスタンス)を作成することができます。

用語集Topに戻る

[a0042]

「パス(PATH)を通す」「カレントディレクトリのファイルの実行」

ハードディスクなどに保存されたファイルの指定は、絶対パスや相対パスで指定することができます。しかし、ディレクトリの階層が深くなると、パス(PATH)は階層の深さに応じてパスが長くなり、記述するのが大変です。そこで、Windowsにはパスを省略する機能があります。

(1) パス(PATH)を通す

ディレクトリ絶対パスをパソコンの「環境変数PATH」に登録することを「ディレクトリにパスを通す」といいます。ディレクトリにパス(PATH)を通すことで、そのディレクトリまでの経路を絶対パスから省略することができます。つまり、パスを通したディレクトリに入っているファイルは、ファイル名だけで実行できます。また、パスを通したディレクトリより下層のファイルやディレクトリを指定する場合、絶対パスを短くすることができます。

以下、具体例で説明します。例えば、下の図のようなディレクトリ構成があった場合、「ディレクトリaaa1の絶対パスを環境変数PATHに記述すること」を、「aaa1にパス(PATH)を通す」といいます。

aaa1にパスを通すと、ファイルの絶対パスを省略できます。パスを通す前と後で比較してみましょう。
aaa1にパスを通すと、「(a) パスを通す前」の赤字の部分が省略できます。つまり、aaa1に直接入っているファイルは、ファイル名だけで指定できるようになり、aaa1より下の階層のファイルやディレクトリを指定する場合は、その絶対パスからaaa1までの経路を省略できます。

(a) パスを通す前
aaa1の中のaaa1_mod1.py:「C:\python_code\aaa1\aaa1_mod1.py」
bbb1の中のbbb1_mod1.py:「C:\python_code\aaa1\bbb1\bbb1_mod1.py」

(b) aaa1にパスを通した後
aaa1の中のaaa1_mod1.py:「aaa1_mod1.py」
bbb1の中のbbb1_mod1.py:「bbb1\bbb1_mod1.py」
※パスを通す前の赤字の部分が省略できる。

(2) カレントディレクトリのファイルの実行

カレントディレクトリにあるファイルや、カレントディレクトリより下層のファイルは、パス(PATH)を通した時と同様にカレントディレクトリまでの経路を絶対パスから省略することができます。つまり、カレントディレクトリにあるファイルはファイル名だけで実行でき、カレントディレクトリより下層のファイルやディレクトリを指定する場合は絶対パスを短くすることができます。
カレントディレクトリは、まさに現在作業しているディレクトリですから、カレントディレクトリのファイルは頻繁に使用されます。ファイル名だけでファイルを指定できるのは、とても便利なのです。このように、カレントディレクトリのファイルは直接ファイル名で実行できるため、プログラムの実行では、どこがカレントディレクトリであるかが重要なのです。

参考記事:
ディレクトリ、カレントディレクトリ、絶対パス、相対パス

用語集Topに戻る

[a0041]

ディレクトリ

「ディレクトリ」は、ハードディスクなどの記憶装置の保存場所を示す箱のようなもので、ディレクトリの中にファイルやディレクトリを作ることができます。Windowsの「フォルダ」のことです。
昔のWindowsやWindowsよりも古いOSであるMS-DOSでは「フォルダ」とは呼ばず、「ディレクトリ」と呼んでいました。ですから「ディレクトリ」=「フォルダ」と考えても問題ありません。厳密には様々な違いがありますが、ここでは説明しません。

参考記事:
ディレクトリ、カレントディレクトリ、絶対パス、相対パス

用語集Topに戻る

[a0040]

ルートディレクトリ

ハードディスクなどの記憶装置の中には、フォルダ(ディレクトリ)を作ることができ、フォルダの中にもフォルダを作ることができますが、ファイルやフォルダを作ることのできる一番上の階層を「ルートディレクトリ」といいます。

参考記事:
ディレクトリ、カレントディレクトリ、絶対パス、相対パス

用語集Topに戻る

[a0039]

カレントディレクトリ

プログラムを動かす上で、現在、どのディレクトリの中で作業をしているのかが重要な場合があります。この現在作業をしているディレクトリのことを「カレントディレクトリ」といいます。

参考記事:
ディレクトリ、カレントディレクトリ、絶対パス、相対パス

用語集Topに戻る

[a0038]

親ディレクトリ

カレントディレクトリの1つ上の階層のディレクトリを「親ディレクトリ」といいます。

参考記事:
ディレクトリ、カレントディレクトリ、絶対パス、相対パス

用語集Topに戻る

[a0037]

サブディレクトリ

カレントディレクトリより下の階層の全てのディレクトリを「サブディレクトリ」といいます。

参考記事:
ディレクトリ、カレントディレクトリ、絶対パス、相対パス

用語集Topに戻る

[a0036]

「パス」「PATH」「絶対パス」「相対パス」

「パス(PATH)」とは、ハードディスクなどの記憶装置の中のフォルダ(ディレクトリ)やファイルの位置を示す文字列のことで、ルートディレクトリからの絶対位置を示す「絶対パス」と、カレントディレクトリからの相対位置を示す「相対パス」があります。絶対パスは、「パス(PATH)を通す」ことで、一部を省略することができます。

参考記事:
ディレクトリ、カレントディレクトリ、絶対パス、相対パス

用語集Topに戻る

[a0035]

MS-DOS

Microsoft社のオペレーティングシステム(OS)で、MS-DOSは主にキーボードからコマンドを入力することによって操作するシステム(CUI)である。当時の低いマシンスペックでは、現在のWindowsのようなマウスなどでグラフィカルな操作を多用するシステム(GUI)は難しく、Windowsが登場するまでは、パソコンの標準的なOSであった。

当時のMS-DOSから様々な拡張がなされているが、Windowsに搭載されているコマンドプロンプトというツールを実行することにより、MS-DOSのような操作方法でプログラムを実行することができる。

用語集Topに戻る

[a0034]

ミュータブルなシーケンス

ミュータブル(変更可能体)シーケンスとは、言葉の通り、シーケンス型の中から、タプル、文字列(str)、bytes型のようなイミュータブル(変更不能体)なシーケンスを除いたもので、リスト(list)、range()、bytearray型などのことです。

以下のメソッドは、ほとんどの「ミュータブルなシーケンス」で使用可能なメソッドなので、「ミュータブルなシーケンス」にどのようなものがあるかを整理しておく必要があります。

s.append(x), s.clear(), s.copy(), s.extend(t), s.insert(i,x), s.pop([i]), s.remove(x), s.reverse()

用語集Topに戻る

[a0033]

条件式

条件をみたす「真(True)」、条件をみたさない「偽(False)」の2種類の解を返す式であり、if文などで用いられる。Pythonの場合、条件式に数値や文字列を用いることもあり、必ずしも条件式の出力がTrue, Falseではないが、if文では数値や文字列を含んだ条件式から「真(True)」「偽(False)」を判断して条件分岐を行う。

参考記事:
論理演算子(and, or, not)の使い方と数値や文字列の論理演算

用語集Topに戻る

[a0032]

短絡演算子

2つ以上の論理演算子(and, or)を用いて論理演算を行う場合、結果が確定した時点で検証をやめ、結果の確定で決め手となった数値や文字列や真偽値を返す。このように、Pythonの論理演算子は答えが確定した時点で評価をやめる演算子なので「短絡演算子」とも呼ばれます。

参考記事:
論理演算子(and, or, not)の使い方と数値や文字列の論理演算

用語集Topに戻る

[a0026]

論理演算

論理演算子(and, or, not)を用いて2つ以上の条件をまとめる演算を行うことです。

参考記事:
論理演算子(and, or, not)の使い方と数値や文字列の論理演算

用語集Topに戻る

[a0027]

(1) 真偽値(論理値、真理値、ブール(bool)値、ブーリアン(boolean))

真偽値は、論理値(logical value)、真理値(truth value)、ブール(bool)値、ブーリアン(boolean)ともいいます。

正しければ「真(True)」、誤りは「偽(False)」です。以下、具体例です。
(3 < 10) → 3 < 10は正しい → 真(True、トゥルー)
(4 < 3) → 4 < 3は誤り → 偽(False、フォールス)

用語集Topに戻る

[a0028]

(2) 論理演算子(ブール演算子、bool演算子)

論理演算子には「and」「or」「not」があります。数学の教科書などでもよく見かけるベン図を使うと、下図のようになります。andやorを用いて2つ以上の条件を1つにまとめたり、notを用いて条件の真偽を逆にしたりできます。

用語集Topに戻る

[a0029]

(a) 論理積 and

「A and B and C → A かつ B かつ C」
A, B, Cがすべて正しい(True)の場合はTrue。1つでも誤りがあるとFalse。

参考:論理演算子[a0028]

用語集Topに戻る

[a0030]

(b) 論理和 or

「A or B or C → A または B または C」
A, B, Cの内、1つでも正解(True)がある場合はTrue。全て誤りの場合はFalse。

参考:論理演算子[a0028]

用語集Topに戻る

[a0031]

(c) 否定 not

「not A → Trueではない→False、 Falseではない→True」
AがTrueなら、Falseに変換。AがFalseなら、Trueに変換。

参考:論理演算子[a0028]

用語集Topに戻る

[a0025]

比較演算子

2つの値を比較し、真偽値(TrueやFalse)を返します。!=, <=, >=は全て「=」が右側になります。左側を「=」にするとエラーになります。「==」を「=」としないようにしましょう。

x == yxとyが等しい。 → True
x != yxとyは等しくない。 → True
x < yxはyより小さい。(xとyは等しくない) → True
x > yxはyより大きい。(xとyは等しくない) → True
x <= yxはy以下。(xとyが等しい時を含む) → True
x >= yxはy以上。(xとyが等しい時を含む) → True
x in yy(シーケンス)の要素にxが存在する。 → True

用語集Topに戻る

[a0024]

インプレース

in place「定位置に」という意味。同じ変数名のままで内容を変更すると、元の変数の値は変更した値で上書きされる。

用語の使用例:
「list.reverse()→リストの要素をインプレースで逆順にする」
「リストは、append(),extend()といったメソッドによりインプレースで改変できる。」
「リストにはリストをインプレースに変更する、組み込みメソッド list.sort() があります。」

用語集Topに戻る

[a0023]

変数の再定義

「変数の再定義」は、変数の内容を全く新しいものに定義し直します。定義し直すので、a = 5を、a = [2]やa = ‘abc’といったように、まったく違う型にすることも可能です。「変数を再定義」は再び代入し直すことによって再定義できます。
「変数の再定義」では、a = 5の様に、左辺が「変数名 =」の形になっています。一方、「要素の変更」では、a[0] = 5の様に、左辺が変数の要素を示す書式になっているので、「変数の再定義」と区別することができます。

 「変数の再定義」で注意しなければならないのは、「変数の再定義」は、今の場所を消して上書きするのではなく、現在の記憶場所を放置し、別の記憶場所に定義し直します。これは、知っておかなければならない重要事項です。

例えば、a = 3と定義されたaを、参照渡し(b = a)により、3という数値をbと共有した後に、「変数の再定義」(a = 5)を行うと、b = 3の記憶場所はそのまま放置し、別の場所にa = 5を再定義します。したがって、「変数の再定義」後はaとbは互いに独立した変数となります。この様に、「変数の再定義」は、今の場所を消して上書きするのではなく、現在の記憶場所を放置し、別の記憶場所に定義し直す。ということを理解しておく必要があるのです。

参考記事:「参照渡し後の要素の変更」と「参照渡し後の再定義」の違い

用語集Topに戻る

a0022

「参照渡し」「浅いコピー」「深いコピー」「NumPy配列のコピー」

用語集としては記事が長いですが、以下の(1)~(6)について説明します。

(1) 変更不能体の「参照渡し」
(2) リストの「参照渡し」「浅いコピー」「深いコピー」
(3) ディクショナリの「参照渡し」「浅いコピー」「深いコピー」
(4) 集合(set)の「参照渡し」「浅いコピー」
(5) NumPy配列のコピー
(6) 参照渡しのまとめ

参考記事:
まずは、理屈抜きで覚えよう。「参照渡し」「浅いコピー」「深いコピー」
NumPyの「参照渡し」と「コピー」を覚えよう。リストとは全然違う。
「参照渡し後の要素の変更」と「参照渡し後の再定義」の違い

用語集Topに戻る

a0022_1

(1) 変更不能体の「参照渡し」

変更不能体には、数値型、文字列、リスト(list)、ブール型、フローズンセットがあります。変更不能体は「参照渡し」「浅いコピー」「深いコピー」の、どのコピーを行ったとしても、それぞれ独立した変数として扱えますので、一番簡単で、速く、メモリーも節約できる「参照渡し」a = bの書式を用います。

変更不能体は変更できないので、変数の内容を変えたいときは、変更ではなく、変数を「再定義」するしかありません。「変数の再定義」は、今の場所を消して上書きするのではなく、現在の記憶場所を放置し、別の記憶場所に定義し直します。
例えば、「参照渡し」(a = 3 →  b = a)では、aとbは同じ場所に記憶された3を共有します。しかし、aを再定義すると、3を記憶したbをそのまま放置し、aは全く別の場所に記憶された新しい値を覚え直します。だから、「参照渡し」だとしても、それぞれ、独立した変数と見なすことができるのです。

関連記事:変更可能体(mutable)と変更不能体(immutable)

この用語のTopにもどる

a0022_2

(2) リストの「参照渡し」「浅いコピー」「深いコピー」

(a)「参照渡し」(b=a)をした後に、aかbのどちらかの「要素を」変更すると、他方の変数の値も連動して変更されます。ただし、変数全体を入れ替えると、それは「変数の再定義」となるので連動しません。

(b)「浅いコピー」(b=a[:], b=copy.copy(a))を行った後に、aかbのどちらかの「一番上の要素」を変更しても、他方の変数の値は連動して変更されません。しかし、それよりも深い部分の要素を変更すると、他方の変数は連動して変更されます。なお、変数全体を入れ替えると、それは「変数の再定義」となるので連動しません。

(c)「深いコピー」(b=copy.deepcopy(a))した後に、aやbにどんな変更を加えても他方の変数に影響をあたえず、それぞれ、完全に独立した変数です。

※「参照渡し」「浅いコピー」「深いコピー」のいずれの場合も変数全体を入れ替え、「変数の再定義」を行うと連動しません。

※ 「変数の再定義」は左辺が「変数名 =」の形になっています。

この用語のTopにもどる

a0022_3

(3) ディクショナリの「参照渡し」「浅いコピー」「深いコピー」

(a) 浅いコピーでb=a[:]の表記はできないため、b=copy.copy(a)とする必要がある。
(b) その他はリストと同じ。

この用語のTopにもどる

a0025_4

(4) 集合(set)の「参照渡し」「浅いコピー」

(a) 浅いコピーでb=a[:]の表記はできないため、b=copy.copy(a)とする必要がある。
(b) 「参照渡し」(b = a)はリストと同じ。
(c) 変更不能体しか要素にできないため、setには深い部分がない。つまり、「浅いコピー」「深いコピー」ともに、それぞれ完全に独立した変数になります。つまり、わざわざ、コピーの遅い「深いコピー」を使用する意味がないので、「浅いコピー」b=copy.copy(a)によりコピーします。

この用語のTopにもどる

a0022_5

(5) NumPy配列のコピー

リストとNumPy配列の比較は下表となります。NumPy配列はリストの「浅いコピー」に相当するコピーがありません。リストとNumPy配列はメモリーへの記憶方法などが全く異なるので、リストのコピー方法の考え方はまったく参考にならない。

この用語のTopにもどる

[a0022_6]

(6) 参照渡しのまとめ

(a) 変更不能体(イミュータブル)の「参照渡し」

「参照渡し」後の、変更不能体への変更は要素の変更ができないため、「変数の再定義」しかなく、片方の変数の変更が、他方の変数に影響を与えることはありません。なお、「変更不能体→変更不能体」だけではなく、「変更不能体→変更可能体」「変更可能体→変更不能体」の場合も変数の再定義以外には変更の手段がありません。片方の変数の変更が、他方の変数に影響を与えることはありません。

(b) リスト、ディクショナリ、集合(set)、NumPy配列

・参照渡し後の変数の再定義 → もう片方の変数は連動しない。
例:a = 2, a = [2], a = (1, 2) ※左辺が「変数名 = 」となっている。

・参照渡し後の要素の変更 → もう片方の変数も連動する。
例:a[0] = 2, a[1][3] = 5 ※左辺が「変数の要素を示す形 = 」となっている。

この用語のTopにもどる

用語集Topに戻る

[a0017]

スコープ

スコープとは、コード内での変数の有効範囲のことです。そして、Pythonには「ローカルスコープ」「外側の関数のスコープ」「グローバルスコープ」「ビルトインスコープ」の4つのスコープがあります。
それぞれのスコープが重なった時の優先順位は「ローカルスコープ」「外側の関数のスコープ」「グローバルスコープ」「ビルトインスコープ」です。なお、「外側の関数」が複数ある場合は内側の関数の方が優先順位が高いです。
関数の外側の変数を参照することは可能ですが、関数の外から関数の内側の変数を参照することはできません。ただし、global, nonlocalを用いた場合は例外です。

[a0018]

(1) ローカルスコープ(Local scope)、ローカル変数

 関数の内側で宣言された変数は「ローカル変数」といいます。そして、このローカル変数のスコープを「ローカルスコープ」といいます。
 ローカルスコープは、変数の宣言を行った関数の内側です。関数の外側からは関数の内側の変数を参照することはできませんので、外側はローカルスコープの範囲外です。
 なお、関数が入れ子構造になっている場合、変数が定義された位置よりも外側の関数からはその変数を参照できませんが、内側の関数からはその変数を参照することが可能です。つまり、定義された変数の位置よりも内側にある関数の中もローカルスコープに含まれます。

[a0019]

(2) 外側の関数のスコープ(Enclosing function’s scope)

「外側の関数のスコープ」は、関数が入れ子の構造(ネスト)になっている場合を想定しています。このとき、内側の関数から見て、外側の関数でローカル変数が定義されているときに、その外側の関数のローカル変数のスコープを「外側の関数のスコープ」といいます。
 ここで重要なのは内側の関数から外側の関数のスコープを見ている点です。視点が変わっているだけなので、難しく考える必要はありません。
 スコープの優先順位の説明をするときなど、この用語を使うと便利な場合があります。
 なお、グローバル変数については、関数から見て外側で定義されていますが、関数で定義されたローカル変数ではないので「外側の関数のスコープ」の対象になりません。

[a0020]

(3) グローバルスコープ(Global Scope)、グローバル変数

モジュールのトップレベル(全ての関数やクラスの外側)で宣言された変数を「グローバル変数」といいます。そして、このグローバル変数のスコープを「グローバルスコープ」といいます。「グローバルスコープ」はモジュール全体です。つまり、グローバル変数は、モジュールの中なら、どこからでも参照することができます。

[a0021]

(4) ビルトインスコープ(Built-in scope)

「ビルトインスコープ」とは、組み込み関数や組み込み変数のスコープです。組み込みであるため、変数や関数を宣言する必要はありません。ビルトインスコープはプログラム全体です。Pythonを起動した時点で、どのモジュールからでも呼び出すことが可能です。組み込み関数や組み込み変数には、int, str, len, range, None, print などがあります。

関連記事:

関数のスコープは3層入れ子構造(ネスト)の具体例で理解しよう。

用語集Topに戻る

[a0016]

静的型付け言語

プログラムのコンパイル時に、変数のデータ型が決定され、データ型を実行途中で変更出来ない言語。

用語集Topに戻る

[a0015]

動的型付け言語

プログラムの実行途中で変数のデータ型を変更することができる言語。

用語集Topに戻る

[a0014]

スクリプト言語

スクリプト言語の明確な定義はない。プログラムの記述、実行が他のプログラムに比べて容易な言語をスクリプト言語と分類されている。
インタプリタ方式で、動的型付け言語である場合が多い。
JavaScript、Perl、Python、PHP、Rubyなどがスクリプト言語として分類されている。

用語集Topに戻る

[a0013]

「イテレートする」「イテレーション」

「イテレートする」とは繰り返し処理をするという意味です。
「イテレーション」とは全ての要素に順番に何らかの処理をすることです。

関連用語:
反復可能体(iterable)イテラブル
反復子(iterator)イテレータ

用語集Topに戻る

[a0012]

「コンパイラ」「インタプリタ」

プログラミング言語は人間にも理解しやすい表記で命令を記述することが出来るように考えられた言語です。プログラミング言語を利用する場合は、まず最初に人間に理解しやすい表記で記述した命令文(「ソースコード」)を作成します。しかし、この「ソースコード」をコンピューターは直接理解することはできませんので、翻訳プログラム(コンパイラやインタプリタ)によってコンピューターが直接理解できる機械語に翻訳します。
なお、Pythonはインタプリタ(型)言語です。

(1)コンパイラ

コンパイラでは、「ソースコード」から「機械語」への翻訳を一度に行います。なお、コンパイラが翻訳することをコンパイルするといいます。
コンパイルには、大規模なアプリケーションでは1時間以上かかることもあります。プログラムの実行は、翻訳が全て終わった後でなければ行えませんので、エラーを修正したり、プログラムを変更して、結果を見たい場合は時間がかかります。
しかし、コンパイル後は翻訳作業がありませんので高速に実行することができます。

(2)インタプリタ

一方、インタプリタは命令文を1行ごとに翻訳しながら実行します。 実行の度に翻訳も行うことになりますので、実行速度は遅くなりますが、プログラムの途中で実行を止めることもできますし、エラーがあった場合もエラーがある部分まで実行することができるため、効率よくプログラミングを行うことができます。

用語集Topに戻る

[a0011]

「ソースプログラム」「プログラム」

「ソースプログラム」も「ソースコード」と同様に各種のプログラミング言語でかかれた人間によって理解のしやすい表記の命令文の集まりのことです。
しかし、「プログラム」の定義は混とんとしています。「コンピューターが判読できるデータ」と限定している解釈があったり、「プログラム言語によって記述したもの」とし、「ソースコード」も「プログラム」に含むような解釈があったりします。
しかし、「プログラムを書く」という表現が違和感なく受け止められることからも、少なくとも慣用的には「プログラム」は「機械語」のコードだけを指すのではなく「中間コード」や「ソースコード」の意味でも使われているようです。

用語集Topに戻る

[a0010]

「ソースコード」「コード」「ソースファイル」

機械語」「ソースコード」の項目でも触れましたが、人間によって理解のしやすい表記で記述できるプログラミング言語を用いて記述された命令文の集まりを「ソースコード」と呼びます。そして、この「ソースコード」が書かれたファイルが「ソースファイル」です。「ソースコード」は「中間コード」や「マシンコード(機械語、マシン語)」に対する対義語であるというニュアンスを持っています。
一方、「コード」とは「ソースコード」だけではなく「マシンコード(機械語、マシン語)」なども含みます。人間に理解しやすい記述かどうかに係わらず、命令文の集まりを「コード」と呼びます。

用語集Topに戻る

[a0009]

「中間コード」

機械語」は、コンピューターが直接理解することができるので非常に高速ですが、コンピューターの種類によって同じ命令でも記述を変えなければならないことがあり、開発効率が非常に悪いという欠点があります。
この欠点は、プログラミング言語を使う場合にも影響を与えます。なぜなら、「ソースコード」を「機械語」に翻訳するプログラム(コンパイラインタプリタ)を全てのコンピューターに対応させなければならないからです。
この問題を解決するために考えられたのが「中間コード」を用いる方法です。この方法は、まずコンピューターの種類に依存しない部分を可能な限り翻訳した「中間コード」と呼ばれるコードに変換します。そして、コンピューターの機種に依存する部分だけ、それぞれのコンピューターに用意された「中間コード」から「機械語」へ翻訳するプログラムで翻訳しながら実行するという方法です。
この方法を用いれば、どうしてもコンピューターの種類に依存してしまう部分だけ、それぞれ用意すればよいので、新しく発売されたコンピューターへの対応も最小限の労力ですみます。
「中間コード」を用いた場合は「機械語」を用いる場合よりも速度は低下しますが、それでも、実行の度に「ソースコード」から「機械語」に翻訳するよりは速度が格段に向上します。
もちろん、「中間コード」も人間が直接記述することは困難なため、翻訳プログラム(コンパイラインタプリタ)によって「ソースコード」を「中間コード」に翻訳します。

用語集Topに戻る

[a0008]

「機械語(マシン語、マシンコード)」「ソースコード」

「機械語」とは0と1の羅列で構成され、コンピューターが直接理解できる言語のことです。しかし、人間が機械語を直接記述することは難しいため、最初から機械語によって命令を記述することはほとんどありません。
一方、プログラミング言語は人間にも理解しやすい表記で命令を記述することが出来るように考えられた言語です。プログラミング言語では、まず最初に、人間に理解しやすい表記で記述した命令文(「ソースコード」)を作成し、この「ソースコード」を翻訳プログラム(コンパイラインタプリタ)によって機械語に翻訳します。

用語集Topに戻る

[a0007]

「対話モード」「インタラクティブモード」「コマンド」「インタラクティブセッション」「スクリプトファイル」「スクリプト」

Pythonでは様々な実行方法があり、それぞれ、記述する命令文の呼び方が違いますので、順を追って説明します。

(1) 「対話モード(インタラクティブモード)」「コマンド」

コマンドプロンプト」の「コマンドライン」にpythonと入力し、リターンキーを押すと対話モード(インタラクティブモード)になります。対話モードで入力する命令文を「コマンド」といいます。

(2) 「インタラクティブセッション」

「インタラクティブセッション」とは、対話モードを開始してから終了するまでの一連の操作のことです。

(3) 「スクリプトファイル」「スクリプト」

対話モードはPythonを電卓の様に使うのであれば気楽ですが、「コマンド」をその度に入力しなければなりません。したがって、複数行にわたる長い命令を対話モードで実行するのは現実的ではありません。
そこで、Pythonにはtext形式のファイルに命令文を記録し、そのファイルを実行する方法が用意されています。そして、このtext形式のファイルの事を「スクリプトファイル」と呼び、更に「スクリプトファイル」に書かれた命令文を「スクリプト」といいます。
「スクリプトファイル」「スクリプト」は、「コマンド」に対比する用語としてのニュアンスを含んでいるように思われます。

実行方法は、コマンドプロンプトコマンドラインに、以下の様に入力し、リターンキーを押します。対話モードの状態からではないので注意してください。なお、Pythonではスクリプトファイルの拡張子は.pyとなります。

python スクリプトファイル名.py

用語集Topに戻る

[a0006]

「コマンドプロンプト」「コマンドライン」「コマンド」「プロンプト」「MS-DOSプロンプト」「DOSプロンプト」「プライマリプロンプト」「セカンダリプロンプト」

Windowsでは、ファイル名を指定して実行→cmdとすることで立ち上がる黒い画面が「コマンドプロンプト」の画面です。「コマンドプロンプト(cmd.exe)」は、windowsにおいて、主にキーボード操作により命令を実行することにより、コンピューターを制御するためのツールです。なお、初期のWindows(98,Me)では、「コマンドプロンプト」という名称ではなく、「MS-DOSプロンプト」であった。
また、コマンドプロンプト(cmd.exe)の中には命令文を入力できる行があり、それを「コマンドライン」といいます。そして、その「コマンドライン」に入力した命令文のことを「コマンド」といいます。

「プロンプト」とは「コマンド入力待ち状態であることを表す記号」のことです。Windowsのツールである「コマンドプロンプト(cmd.exe)」では、この「プロンプト」を「コマンドプロンプト」や「DOSプロンプト」と呼ぶことがあるので、混同しないようにする必要があります。どちらの意味で使われているのかは、文の前後で判断しましょう。

Pythonの対話モード(インタラクティブモード)では、コマンド入力を促すプロンプトは通常「>>>」と表記され、これを「プライマリプロンプト」といいます。if文など複数行にわたり、一連のコマンドを入力する場合、継続行のプロンプトは「・・・」と表記され「セカンダリプロンプト」といいます。なお、この「プライマリプロンプト」や「セカンダリプロンプト」と対比して、対話モードを起動する前のプロンプトを「DOSプロンプト」ということがあります。

用語集Topに戻る

[a0005]

変更可能体(mutable)と変更不能体(immutable)

変更可能体(mutable, ミュータブル)は、変更可能体の一部を変更することが可能です。一方、変更不能体(immutable, イミュータブル)は一部だけを変更することはできません。
しかし、変更可能体も変更不能体も、値を代入し直すことによって「変数の再定義」を行い、そっくり内容を入れ替えることは可能です。なお、「変数の再定義」は、今の場所を消して上書きするのではなく、現在の記憶場所を放置し、別の記憶場所に定義し直します。

変更不能体とはjavaやVBAの「定数」とは異なります。javaやVBAの定数のように、一度、定数として宣言するとその変数は変更ができなくなるのではなく、もう一度値を代入し、定義し直すことはできます。

変更可能体(mutable)と変更不能体(immutable)の分類は以下の通りです。

(1) 変更可能体:リスト、セット、ディクショナリ、bytearray型
(2) 変更不能体:タプル、数値型、文字列、ブール型、フローズンセット、bytes型

Pythonにおいてタプルや文字列や数値型は変更不能体です。しかし、例えばa=(2,3), a=’abc’, a=3とした後に、それぞれ、a=5とすれば、いずれもa=5となります。あくまで、部分的に変更できないだけなのです。

なお、変更可能体と変更不能体については、参照先アドレス(id)に注目して理解する必要があります。用語集では参照先アドレス(id)については触れていません。「参照渡し」「浅いコピー」「深いコピー」の違いを理解する上で役に立つと思いますので、是非、ご一読ください。

変更可能体と変更不能体はidに注目。参照渡しや浅いコピーの理解にも役立つ。

タプルの例

タプルは変更不能体ですので、下図のようにタプルの要素の一部を変更しようとしてもエラーとなります。一部を変更することはできないのです。


タプルの内容を変更したいときには、下図のようにタプル全体を代入し直し、「変数の再定義」することでしか内容を変更することはできません。a=(2, 3)で用意された変数の箱は、箱ごと放置され、新しい記憶場所にa=(2, 5)という箱を作り直します。「変数の再定義」は、今の場所を消して上書きするのではなく、現在の記憶場所を放置し、別の記憶場所に定義し直します。

用語集Topに戻る

[a0004]

イテレータ (iterator)、反復子

イテレータ(反復子)は、求められるたびに要素をひとつずつ返し、データがなくなると、データの代わりに StopIteration 例外を返すオブジェクトです。例外を返すことにより、データがなくなったことを示します。イテレータはデータが無くなると、その後データを返すことができなくなります。
for文はイテレータとは無関係のように見えますが、実はfor ループを使うたびに、listなどのイテラブルから、新たな未使用のイテレータを生成して利用しています。
iter() 関数を用いることにより、listなどのイテラブルからイテレータを生成することが可能です。

関連用語:
イテラブル(iterable)、反復可能体
「イテレートする」「イテレーション」

用語集Topに戻る

[a0003]

イテラブル (iterable)、反復可能体

イテラブル(反復可能体)とは要素をひとつずつ返すことが可能なオブジェクトのことです。でも、この説明は、あくまで、イテレータに容易に変換できるオブジェクトの特徴を言葉にしているにすぎません。

結局、「イテラブル」とは、「イテレータに変換可能なオブジェクト」のことなのです。つまり、関数 iter()を用いてイテレータを生成することができるオブジェクトとも言えます。

「イテレータ」は便利なため、その「イテレータ」に変換される前の「イテラブル」も様々なところで使われます。例えば、for文のinの後や、組み込み関数のsum(), set(), max(), list()の引数などには「イテラブル」が使われます。

つまり、「イテレータに変換可能なオブジェクト」を「イテラブル」と呼ぶと説明しやすいのです。

なお、イテラブルには、シーケンス型(リスト、タプル、文字列、rangeオブジェクトなど)だけでなく、flieなども含まれます。また、順番が定義されていないディクショナリ型や集合型などもイテラブルです。

関連用語:
イテレータ(iterator)、反復子
「イテレートする」「イテレーション」

用語集Topに戻る

[a0002]

シーケンス型

リスト(list)、タプル(tuple)、文字列(str)、rangeオブジェクト、bytes型、bytearray型などのように、複数の要素を順番に並べたデータ型をシーケンス型と分類します。なお、数値は複数の要素を持ちませんからシーケンス型ではありません。また、ディクショナリ型、set型は複数の要素を持つことができますが、順番という概念がないのでシーケンス型ではありません。

用語集Topに戻る

[a0001]

リテラル (literal)

データそのものの表記のこと。例えばa=10ならば、数値のデータそのものである10がリテラルであり、変数(a)に数値リテラル(10)を代入しています。数字リテラルや文字列リテラルだけではなく、リストやタプルにおいても、データそのものの表記をリテラルといいます。

<リテラルの例>

数値リテラル:10
文字列リテラル:’abc’
リスト(list)のリテラル表記:[5, 3]
タプル(tuple)のリテラル表記:(5, 3)

用語集Topに戻る