Python言語の文法を、コードを書く流れに沿って説明していく連載。今回と次回は、値やデータの型を説明。今回はその前編として、bool型/int型/float型/str型を取り上げる。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「deepinsider.jp」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
前回はPython言語の基礎中の基礎とも言える「変数」と、Pythonの世界を構成する「オブジェクト」について解説した。今回は、基本的なデータの型である「bool型(ブール型)」「int型/float型(数値型)」「str型(文字列型)」について説明する。※脚注や図、コードリストの番号は前回からの続き番号としている。
本連載は、実際にライブラリ「TensorFlow」でディープラーニングのコードを書く流れに沿って、具体的にはLesson 1で掲載した図1-a/b/c/dのサンプルコードの順で、基礎文法が学んでいけるように目次を構成している。今回は、図1-b/d内の一部コードを取り上げる。
今回、本稿で説明するのは、図1-b/d【再掲】における赤枠内のコードのみとなる。青枠内のコードは次回説明する。
なお、本稿で示すサンプルコードの実行環境については、Lesson 1を一読してほしい。
Lesson 1でも示したように、本連載のすべてのサンプルコードは、下記のリンク先で実行もしくは参照できる。
それでは、bool型/int型/float型/str型を順に説明していこう。
変数には、前回Lesson 4で見たような「モジュール」だけでなく、「数値」「文章」「一覧データ」など、さまざまな値/データが代入できる。例えばリスト7は、前掲の図1-b/d内のサンプルコードの中にある「変数に対して何かを代入している行」(=冒頭で示した【再掲】画像の赤枠の内容)を抜き出して並べたものだ。
# 変数への「数値」の代入
EPOCHS = 500
# 変数への「文字列値」の代入
color = 'blue'
#color = 'red' # 同じデータ型なので説明省略
この例では、数値(500)と文字列値('blue')といいった値/データが変数に代入されている。この値/データの「種類」のことを型(type)と呼ぶ。Python言語に標準で組み込まれている型(=組み込み型:Built-in Types)には、主に以下のようなものがある(※すべてではなく、今回紹介する分のみ)。
それぞれ具体的なコードで示しながら説明していこう。
bool型(ブール型)
bool型は、前掲のリスト7に示した「変数への代入」としては記述されていないが、データの型としては使用されているので(例えば図1-bにあるFalse)、やはり知っておく必要がある文法要素の一つだ。bool型の性質を理解するためにも、ここでは仮のサンプルコードで説明しておこう。
is_a = True
is_b = False
is_b # Falseと出力される
リスト7-1の「真偽値」の代入をイメージで表すと、図9-1のようになる。
リスト7-1では、変数is_aと変数is_bにTrue(真=正しい)やFalse(偽=間違い)という値(略して「真偽値」)を設定(=代入)している。なお、この変数名のis_aとis_bには特別な意味はなく、「aかどうか」「bかどうか」という意味でこのような変数を自作した。
int型/float型(数値型)
int型は、前掲のリスト7のコードに含まれていた。その部分を抜き出したのがリスト7-2だ。
EPOCHS = 500
EPOCHS # 500と出力される
リスト7-2では、変数EPOCHSに500という整数値を設定している。ちなみにEPOCHS(エポック)とは、機械学習/ディープラーニングの専門用語で、詳しくは『初めてのニューラルネットワーク&ディープラーニング実装(TensorFlow 2+Keras(tf.keras)入門)』で説明する。ここでは内容は分からなくとも「エポック(学習回数)を500回に設定した」という意味だと理解しておいてほしい。
float型は、リスト7には含まれていないが、int型とほぼ同じと考えてよい。違いは、int型が整数のみを扱う型なのに対し、float型は実数(=整数も含めて、小数点が付く値)を扱う型である点だ。なお、float型の値は、厳密には「実数値」ではなく、プログラミング用語で浮動小数点数値と呼ぶ。浮動小数点数値とは、符号と指数と仮数を用いて表された実数値のことであるが、その内容を説明すると長くなってしまうので、ここでは説明を割愛する。「浮動小数点数値は、実数値と同等のもの」と考えておけば問題ない。
機械学習/ディープラーニングでは、int型よりも、float型の方をよく使う。
ここでも仮のサンプルコードで説明しておこう。
float_variable = 123.456
float_variable # 123.456と出力される
リスト7-3では、変数float_variableに123.456という数値を設定している。
str型(文字列型)
str型のコード例は、次のとおり(リスト7からの一部抜粋)。
color = 'blue'
color # 'blue'と出力される
リスト7-4では、変数colorに'blue'という文字列値(=文字がつらなったもの。例えば単語や文、文章など)を設定している。文字列は(基本的に)このように一重引用符('、シングルクォーテーション)で挟んで記述する。
ちなみに、文字列の中に'を記述したい場合は、二重引用符("、ダブルクォーテーション)で挟んで記述すればよい(リスト7-5)。文字列は一重引用符だけでなく、二重引用符でも記述可能である。
color = "b'lue"
color # "b'lue"と出力される
また、文字列の中に一重引用符と二重引用符の両方が登場する場合は、\'や\"のように文字の前に\(=OS環境によって\バックスラッシュか¥円マークで表示)を付ければよい(リスト7-6、併せて「【コラム】エスケープシーケンス」を参照)。
color = 'b\'l"ue'
color # 'b\'l"ue'と出力される
\を前に付けた文字はエスケープシーケンスと呼ばれる特殊文字となる。Pythonでは、主に次のようなエスケープシーケンスが用意されている。改行は通常、\nを使えばよい。
エスケープシーケンス | 意味 |
---|---|
\\ | バックスラッシュ(\) |
\' | 一重引用符(') |
\" | 二重引用符(") |
\r | Linuxの改行(CR:行頭復帰) |
\n | Macの改行(LF:次行移行) |
\r\n | Windowsの改行(CR+LF) |
\t | タブ文字 |
表1 文字列で使えるエスケープシーケンス |
str型である文字列に関しては、文字列の操作(検索や置換、大文字/小文字化、空白削除など)系の関数があり、特定の場面ではよく使うのですべて紹介したいところだが、本連載は「TensorFlowチュートリアルの読み書き」にフォーカスを当てており、それらについてはあまり出番がないようだったので割愛する。複数の変数の値から任意の文字列を作成できる文字列フォーマットについてはLesson 8で紹介する。
上記のコード例を読む中で、is_aのように_(アンダースコア)を使うことや、EPOCHSがすべて大文字であることに違和感を持ったかもしれない。本コラムでは、主に変数の名前などの命名規則(=名前付けのルール)について説明しよう。
Python言語の原則的な命名規則(※本コラム末尾のリンク先を参照)としては、アルファベット(主に英単語)と数字を組み合わせて好きな語句を作り、単語間を区切るときは_(アンダースコア、アンダーバー)を使うのが一般的だ。また、名前はすべて小文字でつづるのが一般的である。前掲のリスト7-1の変数名はそれにのっとって、is_aやis_bと命名している。
ちなみに、Lesson 7で説明する「関数」も同様の命名規則となる。例えば関数名をmy_function()のように命名する。
また、変数EPOCHSは、すべて大文字にすることで、その変数が定数(後述)であることを明示している。定数(constants)とは、「変わらない」変数のことで、一度、変数にデータ/値を代入したら二度と変えないようにしようね、というルールになっている。コードを書く側が「この変数は定数なので、再代入や中身の変更は不可ですよ」と明示しているわけである。
もちろん、原則から外れる命名規則もあり、Lesson 11で説明する「クラス」とLesson 17で説明する「例外」がそれになる。ここで簡単に名前の例だけ挙げておくと、クラスMyCalssNameや例外MyExceptionNameのように、単語の先頭は大文字で書き、単語の区切りは(大文字で分かるので)何も入れない。先ほどの原則に従えばmy_calss_nameと命名すべきところが、クラスではMyCalssNameとなるわけである。
なお、単語間ではなく、名前の先頭文字に_(アンダースコア1個)や__(アンダースコア2個)を使うこともできるが、そうした場合、それらの変数などは特別な意味・機能(具体的には「アクセス制限」などの機能)を持つことになる。詳しくはLesson 12で説明するので、現時点ではそのような命名をしないように気を付けてほしい。
以上、命名規則についてまとめておこう。
初心者のうちは、この3つだけ覚えておけば十分だ。万が一、覚えていなくて命名規則から外れていても、コーディングするうえで実用上の問題は発生しないので、安心してほしい。一般的な命名規則はPEP 8というPython公式スタイルガイド(日本語訳)に詳しく記載されているので、興味がある方は、本連載を読了した後ぐらいのタイミングで読んでみてほしい(※繰り返すが、初心者はそこまで詳しく命名規則を学ぶ必要はない。Pythonに慣れて余裕が出てきてから読めばよい)。
今回はデータ型の基本である「bool型(ブール型)」「int型/float型(数値型)」「str型(文字列型)」について説明した。次回は、続編としてコレクション(=複数の値をまとめて管理できるデータ型)の「list型(リスト型)」「tuple型(タプル型)」「dict型(辞書型)」を紹介する。
Copyright© Digital Advantage Corp. All Rights Reserved.