Programmierkurs
für Naturwissenschaftler/innen

その他もろもろ

ここでいままできちんと説明していなかった諸々について説明する。

行の連結

一行が長くなるときに、複数行に分けて書きたい場合がある。 そのような場合に \ を使うことができる。 \ の後に文字 (特に空白) を入れてはいけない。

summation = 1 + 2 + 3 + 4 + 5 \
          + 6 + 7 + 8 + 9 + 10

例外的に括弧については、閉じ括弧がくるまで改行が入ってもよい:

summation = (1 + 2 + 3 + 4 + 5
             + 6 + 7 + 8 + 9 + 10)
array = [
    1, 2,
    3, 4,
    5
]

良くない書き方だが、 () の間は改行とインデントは無視されるので、以下のように書くこともできる。

# ! 良くない書き方 !
summation = (1 + 2 + 3 + 4 + 5


    + 6 + 7
+ 8 + 9 + 10)

コーディングスタイル

コーディングスタイルとは、プログラムを書く際の細かいルールを指す。 例えばインデントとして 4 文字の空白を使うか、2 文字にするか、などである。 これは実行結果には影響しないが、プログラムの読みやすさに影響する。

重要なことは、一つのプログラムでは一貫したルールに従うということである。 例えば、

# ! 良くない書き方 !

if x < 0:
      print("negative")
else:
  print("zero or positive")

for i in range(10):
    print(i)

は、文法的には問題ないが、非常に読みにくい。

初心者は「自分が分かれば良い」と考えがちだが、数日後の自分は他人である。 後日自分のプログラムを読んだときに、自分で書いたプログラムにもかかわらずよく分からない、ということは良くある。 従って、意識して (自分も含めた) 他人にも分かりやすい書き方を心掛けることは重要である。

たとえその予定が無くても、他人に見られることを前提として分かりやすいプログラムを書こう。

Python ではこうしたルールは、 PEP 8 (PEP は Python Enhancement Proposals の略) にまとめられている。 絶対的なルールではないが、多くの Python プログラマーがこのルールに則ってプログラムを書いている。 気が向いたら読んでみるのも良いだろう。

エラーメッセージの読み方

以下のようなプログラムを書いて実行したとしよう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def sum3(n):
    summation = 0
    for i in range(3):
        summatio += n + i    # ! エラー (変数名間違い)
    return summation

def print_sum(n):
    s = sum3(n)
    print(s)

print_sum(10)

このとき以下のようなエラーメッセージが表示されるであろう (細かい部分は異なっているかもしれない)。

Traceback (most recent call last):
  File "<exec>", line 11, in <module>
  File "<exec>", line 8, in print_sum
  File "<exec>", line 4, in sum3
UnboundLocalError: local variable 'summatio' referenced before assignment

一番下の行 (ここでは UnboundLocalError: local variable 'summatio' referenced before assignment) が具体的なエラーの内容である。 ここでは、 summatio という変数が、値を入れる前に使われようとしている (≒そのような変数はない) と言っている。

その前に書かれているのは、ここに至るまでの実行順序である。 ここでは、

  1. 11 行目 (print_sum(10)) が実行され、

  2. 8 行目 (print_sum() の中) の s = sum3(n) が実行され、

  3. 4 行目 (sum3() の中) を実行しようとしたところでエラーが出た

ということを示している。 すなわち、4 行目 (sum3() の中) にエラーがあるということである。

従って、原則としてエラーメッセージは下から読むのが良い。

それより以前の部分は、複雑なプログラムにおいてデバッグのための重要なヒントとなることがあるが、今はあまり気にしなくてよい。