前回まででPythonの開発環境の構築が完了しました。
早速コードを書いていきたい!と思うところですが、焦りは禁物。
Pythonではどんなデータを扱えるのか? 今回はデータ型と宣言についてみていきます。
データ型
動作確認でしれっと”hello world”の表示や”2*5″の計算を行っていました。明らかに”hello world”は文字、”2″とか”5″は数字ですね。
Pythonには標準でインタプリタに様々な種類のデータ型が組み込まれているので、組み込み型とも呼ばれています。以下に主なものをまとめました。詳細は公式ドキュメントをご参照ください(https://docs.python.org/ja/3.13/library/stdtypes.html)。
分類 | 型 | 概要 |
数値 | int | 整数 |
数値 | float | 浮動小数点 |
数値 | complex | 複素数 |
テキストシーケンス | str | 文字列 |
バイナリシーケンス | bytes | バイナリ |
シーケンス | list | 順序ありリスト |
シーケンス | tuple | 順序ありリスト(変更不可) |
マッピング | dict | キー/値の辞書 |
集合 | set | 順序なし値の集合 |
その他 | bool | 論理 |
その他 | None | 値を返さない ヌルオブジェクト |
いずれも科学技術計算やデータの読み込み・書き出しでお世話になるものです。ただし、実際に使わないと「何それ??」と思いますし、似たような組み込み型の違いも理解が追い付きません。
数値型と論理型boolは他のプログラミング言語でも共通で見られます。リストや集合は何かというと、Fortranであれば配列と呼ぶことができるでしょう(管理人・ぷみはクセでPythonでも配列と呼んでいます)。ただし性質は異なります。その性質とは、次のように呼ばれています。
- mutable:変更可能
- immutable:変更不可
- iterable:反復可能
例えば上の表では、listはmutableでtupleはimmutableですが、いずれもiterableです。setはimmutableで反復不可、順序をもちません。このような性質は、いずれその組み込み型を使うときに一緒に見ていくことにしましょう。
データ型の宣言
データ型の宣言とは、データの種類をコード上で明示することです。
例えば動作確認のコードをもう少し編集して、以下のようにしてみます。
message=’hello world’
print(message)
これを実行すると、きちんと”hello world”が表示されるはずです。
ここで、messageが文字列のデータ型であることは明示していません。Pythonでは型の宣言をしなくてもプログラムを実行することができます。
さらに、次のようにコードを追加してみましょう。
message=’hello world’
print(message)
message=2*5
print(message)
これを実行するとどうなるでしょうか??
hello world
10
このように表示されるはずです。
このコードではmessageという変数(データの入れ物)を使って、文字列と整数の2種類のデータを入れてしまいました。Pythonではこのように、データ型に応じて変数が形を変えて合わせてくれます。これを動的型付けと呼びます。初めて変数に中身を格納する際に、必要なメモリも確保されます。
一方、変数の型を決定しデータ型との整合性がチェックされるプログラミング言語もあります。そのような言語は静的型付け言語と呼ばれ、JavaやC言語が該当します。未宣言の変数があれば”*** is not declared”というエラーが出ますし、変数と中身の型が合っていなければ当然怒られます。
ところで上記のようなコードがPythonでは許されている(動く)からといって、そのようなコーディングが推奨されているわけではありません。当たり前ですが、1つの変数を異なるデータ型にあれこれ使うとバグの原因になります。四則演算しようと思ったら文字列が入っていてプログラムが止まってしまった。計算結果を出力しようとしたら、ファイル名が表示された。そのようなことが起きないよう、型付けは一対一対応でコーディングしていくべきなのです。Pythonでは次のように型の宣言をすることができます。
message: str=’hello world’
a: int=2
b: int=5
print(message)
print(a*b)
今回はデータ型の種類と宣言について学習しました。次回は数値の型をもう少し詳しくみてみます。続く!