やるだけPython

Yamato Nagata

[email protected]

last update: 07/22/2022

プリミティブ型とは

まずプリミティブが何かを説明する前に、その修飾語が掛かっている"型"とは何かを説明する必要があります。

うるせえ!プログラムが内部でどうなってるかなんて豆知識興味ねえ!という方は、プリミティブとはまで飛ばしていただいても大丈夫です。

型とは

プログラムはすべてコンピュータの内部で実行されていますから、当然それは電気で動いていることになります。 では、電気でどうやって普段私たちが見ているようなYoutubeの動画や音楽、このページを見ているあなたのブラウザは表現されているのでしょう。

実は、こういった情報(データ) は、電気的な信号のオンオフで表現されています。数えきれないほどの部屋がコンピュータの中にあって、それぞれの部屋が「電圧が高いバチバチの状態」か「電圧が低いショボショボの状態か」の組み合わせになってるということですね。

1つの部屋があれば、バチバチとショボショボの2種類の状態が表現できます。2つの部屋があれば、2種類×2種類で4通り、3つの部屋があれば2種類×2種類×2種類で8通り...という風に、2の(部屋の数)乗の表現ができるようになります。

部屋の数が少なければ表現できる数は少なく無いように見えますが、実際にはとてつもない程の表現ができます。
部屋の数を n として、すこし表を作ってみました。

n 2^n
1 2
2 4
4 16
8 256
16 65,536
32 4,294,967,296
64 18,446,744,073,709,551,616
128 340,282,366,920,938,463,463,374,607,431,768,211,456

どうでしょう? 日本の人口を1億3000万人としても、すべての人に異なる状態を割り当てるには、部屋の数がたったの30個で済んでしまうのです。

ちょっと脱線しましたが、つまるところ、コンピュータのデータというのはこういった部屋の状態の組み合わせです。 用語的には、この部屋をビットという単位で数え、コンピュータは電圧の高い状態を1、低い状態を0とみなします。 たとえば、1001は4ビットの値で、イチ ゼロ ゼロ イチという風に読みます。 もしこれをセンジュウイチという風に読んでしまうと、普通の10進数と見分けがつきませんので、混同しないようにしましょう。

さて、コンピュータはこのビットデータを情報として読むわけですが、これが果たして整数を表すビット列(ビットの塊)なのか、文字を表すビット列なのか、どう判断するのでしょうか?

ここで出てくるのがの考えです。つまり
"1000110は数字の70かもしれないし、文字列の'F'かもしれない。けれど、さっきプログラムの中でこの値は整数として扱うと決めたから、整数です!"
といったように、そのデータをどういう扱いとするかを定めたのが型です。

プリミティブとは

プリミティブとは、Primitive(原始的)のことです。では、原始的な型とはなんでしょうか。

wikipediaによると

プリミティブ型(プリミティブがた 英語: primitive data type、プリミティブデータ型)は、データ型の1分類である。
理論計算機科学的に代数的データ型によって考えれば「そのデータ型の定義の中に部分として他の型を含まないような型」がプリミティブ型であるが、Javaにおいて型が「primitive types(プリミティブ型)とreference type(参照型)」に二分されることにひきずられたと思われる2分法などが信じられていることも多い。

この記事におけるここから先の説明は、最初に説明した理論的な分類に従ったものではなく、よく信じられているらしい「プログラミング言語によって提供されるデータ型であり基本的な要素である。対する語は複合型という。言語やその実装に依存して、プリミティブ型がコンピュータメモリ上のオブジェクトと一対一対応のときもあれば、そうでないときもある。組み込み型もしくは基本型とも呼ぶ。」という解釈に従ったものである。

-- プリミティブ型

難しい言葉が並びましたが、要は「プログラミング言語自体が扱わせてくれる、特に基本的な型」のことです。 Pythonではこれを組み込み型(インタープリタに直接組み込まれている型=特殊なステップをふまずとも直ぐに使える)と言います。 これには複数ありますが、特に言語の中核をなす型をピックアップしました。

まず整数を表すint, 浮動小数点数を表すfloat, 複素数を表すcomplex
様々なデータをまとめて管理するもの(シーケンス)のうち、変更可能なlist, 変更不可能なtuple, 整数の範囲を表すrange
文字列を表すstr
数学的な集合演算ができるset
辞書のような使い方ができるdict
真偽値を扱うbool

です。

あなたが実際にプログラムを実行して、この項目で述べているような結果になるかを確認するために、値の型を確認するための方法を先に教えておきます。
type(5)のようにtype()の()の中に型を知りたいものを入力することで、その型を知ることができます。

5int型ですから、実行結果は

type(5)
# <class 'int'>

となります。classについてはのちに述べますので、今はわからなくても大丈夫です。

まずは、数値を表す上の3つから見ていきましょう。