リファクタリングをPythonで実践!基本手法とコード例・注意点まで
1.Pythonの基本文法とプログラムの流れ
Pythonの基本的な記述ルールやコメントの書き方について解説します。
①記述のルール
Pythonのコードは一行単位で意味を持っています。行末に「;」などを付ける必要はありません。見やすいように、適宜空行を挟み、まとまりを目立たせましょう。
後述するifやforでは、それぞれifの後に実行したいまとまり、forの中で実行したいまとまりに、同じ数の字下げ(インデント)を付けます。インデントの単位はスペース4つが推奨されているので守りましょう。この際も、まとまりを「{}」で囲む必要はありません。Pythonのコードのまとまりはインデントが全てです。
②コメントの書き方
コードには適宜コメントを入れます。コメントとは、書いてあるけれども実行されない行のことです。そのためコードの内容の解説として利用されます。コメントには日本語も使えます。
コメントは、行頭に
#
を付けるだけです。それで1行全てがコメントになります。また、行の途中に#を書くと、その#から後ろがコメントになります。
コードを書いて、実際に動かしながら正しいものにしていくことをデバッグと言いますが、そのデバッグの際に、わざと処理を行わせなくしたりするのにもコメントを使います。これを「コメントアウト」と言います。デバッグの時にはよく行われる技です。
③変数とは
変数とは、「値の入れ物」のことです。プログラムをコンピュータに実行させるとき、値を記憶しておくための領域がなくてはなりません。値を記憶しておかなければ、コンピュータが計算できません。この領域のことを変数と呼ぶのです。
Pythonでは変数名に以下の文字が使えます。
・英字大文字小文字
・数字
・_
たとえば、
a = 1
とすると、変数aは1という値になります。このとき、
a = a + 1
とすると、aの値は何になるでしょうか?
数学の「=」を見慣れた人には変な式ですね。aとa+1が等しいはずはないですから。しかし、プログラミングにおいて、これは立派なコードなのです。この場合の「=」は「代入」といって、概念的に書けば
a ← a + 1
という意味です。つまり、現在のaに1を足した値をaに代入し直せ、という意味になるのです。つまり、この場合aは「2」になります。この代入という概念はプログラミング初心者がつまずきやすい箇所なので、十分留意してください。
2.Pythonのデータ型
Pythonの変数はデータ型を気にしないで書けます。
a = 1
a = 'こんにちは'
と書いてもエラーになりません。しかし、内部ではデータ型の違いを持っているので、以下に簡単に解説します。
①文字列型
文字列は「’」(シングルクオーテーション)か「”」(ダブルクオーテーション)で囲みます。囲む文字が2種類用意されているのは、例えば「’」を代入したいときには「” ‘ “」と、「”」を代入したいときには「’ ” ‘」と書けるようにしているのです。
②数値型
数値はそのまま代入できます。Pythonの数値型は、内部では細かな種類の違いがありますが、初心者はとりあえず気にしなくても大丈夫です。少数型や整数型はPythonが自動で認識してくれます。開発者が気にすることはほぼありません。ただし、
'1'
と
1
は全然違う意味なので注意が必要です。前者は文字列としての1、後者は数値としての1です。
③リスト型
リスト型とは変数の連なりです。他言語では配列とよばれるものです。リスト型は「[]」で囲んで表します。
a = [1, 2, 3, 4, 5]
とすれば、変数aには先頭から順に1,2,3,4,5と入ります。では、この値を取り出すときにはどうすればいいのでしょうか。
ここで注意が必要です。リスト型から値を取り出すときに、インデックス(何番目の値か)を指定しますが、インデックスは0から始まるのです。たとえば、配列aの1番目なら
a[0]
で取り出します。5番目は
a[4]
です。間違って a[5] などと範囲を超えたインデックスを指定すると、エラーでプログラムの実行が止まります。この、インデックスが0から始まるという点も、初心者がつまずきやすいポイントですので、押さえておきましょう。
④タプル型
リスト型は宣言したあとに、値を改変できます。具体的に見ていきましょう。
a = [1, 2, 3, 4, 5]
a[2] = 10
print(a)
の実行結果は
[1,2,10,4,5]
です。リストの値を変えられないようにしたいときは、タプル型を使います。タプル型は「()」で囲んで表します。
a = (1, 2, 3, 4, 5)
a[2] = 10
とすると、プログラムはエラーで止まります。また、タプル型は定義するときは「()」ですがアクセスするときは「[]」なので注意しましょう。
④辞書型
リスト型やタプル型は、値を取り出すときインデックスを指定して取り出さなければなりません。これを文字列で取り出せるようにしたのが辞書型です。辞書型は「{}」で囲んで表します。
インデックスの代わりに使う文字列のことをキーと言います。具体的には、
a = {'バナナ':300, 'りんご':200, 'パイナップル':500}
のようにして、キーと値のペアで表します。
print(a['バナナ'])
の結果は
300
です。
⑤型変換(キャスト)
数値型を文字列型に変えるのはstrを使います。
a = 1
b = str(a)
とすると、aは1ですがbは’1’となります。反対に、文字列型を数値型に変えるときは、整数ならint、少数ならfloatを使います。使い分けが必要なので注意が必要です。
a = '100'
b = int(a)
とすると、aは’100’ですがbは100となります。この、数値型への変換では、数値として認識できない文字が含まれているとエラーになるので注意しましょう。
⑥真偽型(bool型)
Pythonには真偽値が用意されています。つまり「True」と「False」です。後述するif文の条件判定の結果はTrueかFalseになります。ちなみに「not」を付けるとTrueとFalseが反転します。
たとえば、
a = True
b = not a
print(b)
の実行結果は
False
となります。
3.条件分岐(if文)
if文について解説しましょう。ifは直訳すると「もしも」です。たとえばaが1のときだけ処理をさせたいなら
if a == 1:
flag = True
のように書きます。
ifの条件に当てはまった場合に、実行させたい処理のまとまりは、先述したようにインデントして書きます。Pythonはインデントされた部分の最後までの条件に当てはまったときだけ、処理を実行します。
条件には次のようなものが使えます。
==:左辺と右辺が等しい
!=:左辺と右辺が等しくない
<:左辺が右辺より小さい
<=:左辺が右辺以下
>:左辺が右辺より大きい
>=:左辺が右辺以上
4.繰り返し処理(for文)
forは繰り返し処理のことです。たとえば、
a = [2, 4, 6, 8, 10]
とすると
for i in a:
print(i)
の実行結果は
2
4
6
8
10
です。そう、Pythonのforは、inの後の変数の要素を最初から順番に一つずつ取り出すのです。では単純に、10回繰り返したい、というような場合どう書けばいいのでしょうか?それは、
for i in range(10):
と書きます。rangeとは数から配列を作る関数で、
range(10)
とすると、
0,1,2,3,4,5,6,7,8,9
の配列が作られます。これで単純ループを実現します。
for i in range(10):
print(i)
の実行結果は
0
1
2
3
4
5
6
7
8
9
です。
5.関数とは
関数とは、端的にいうと「再利用可能な処理のまとまり」です。「def」で関数を定義します。例を挙げましょう。
def increment(a):
return a+1
b = 2
b = increment(b)
print(b)
b = increment(b)
print(b)
の実行結果は
3
4
です。関数内はインデントします。値を返すときはreturnを使います。
コード内に関数があると、そこの部分は呼ばれるまで実行されません。ただし、どの箇所からでも、何度でも呼べます。 共通の処理を書いておくのに使用します。同じコードがコピペでコード内に散らかっていては保守性が下がります。仕様変更などがあり修正するとき大変です。