この記事では、Pythonを使ったプログラムがどのような見た目になるのか、特徴としてどのようなものがあるかについて解説します。
- Pythonの特徴としてのインデント
- Pythonプログラムの実行方法
- 入出力、コメント
- 変数のルールや予約語
- エラーとトレースバック
これらについて解説します。
インデント(ブロック)
プログラムのまとまりをブロックといい、JavaやC言語などの他の言語では波括弧({}
)を使って表すことが多いのですが、Pythonはこのブロックをインデント(字下げ)を使って表します。
インデントのレベル(深さ)でプログラムのブロック、スコープを表すのです。
以下はサンプルになります。Pythonの書き方、インデントの使い方を見てみましょう。
def main():
"""サンプルプログラムのメイン関数"""
for i in range(1, 10):
if i % 2 == 0:
print(f"{i}は偶数です。")
else:
print(f"{i}は奇数です。")
if __name__ == "__main__":
main()
このプログラムをsample.py
という名前で保存します。作成したプログラムは、ターミナルやコマンドプロンプトで以下のようにして実行できます。
python sample.py
実行すると次のように実行結果が出力されます。
1は奇数です。
2は偶数です。
3は奇数です。
4は偶数です。
5は奇数です。
6は偶数です。
7は奇数です。
8は偶数です。
9は奇数です。
入出力
Pythonでは入力と出力をとても簡単に扱えます。
ユーザーからのデータを標準入力から読み込むためのinput()
という組み込み関数が用意されています。
出力には、print()
関数を使います。
この2つの関数を組み合わせてユーザーからデータを入力してもらい結果を出力するプログラムは以下のようになります。
name = input("お名前は?")
print(f"こんにちは、{name}さん!")
コメント
Pythonでコメントを書く方法は1つだけです。Pythonのコメントは文の先頭に#
を付けます。
#
がついたコメントはその行全体がコメントになります。
pythonには複数行をコメントアウトするブロックコメントがありません。
# これはコメントです。
print("test") # これもコメントです。
識別子(名前)
プログラムの変数や関数、クラスの名前のことを識別子といいます。
Pythonでは識別子(名前)には、大文字・小文字のアルファベット、アンダースコア(_
)、数字のASCII文字、日本語を含むASCII以外の文字が使用可能です。
ただし、数字は識別子の先頭には使えません。
abc = 123 # これはOK
ABC = 123 # これもOK(定数などは大文字で表記することが多い)
abc_123 = 123 #これもOK(単語と単語の間をアンダースコアでつなぐことが多い)
123abc = 123 # これはNG
_abc = 123 # アンダースコアから始まるのはOK
変数
変数とは値を入れておく箱のことです。Pythonの変数は識別子の規則にしたがっていれば良く、型の宣言や方によって$
や%
といった記号をつける必要もありません。
変数は、オブジェクトを割り当てると名前空間にバインディングされます。
未定義の変数を参照しようとするとNameError
の例外が出されます。
spam = 'ham'
print(spam)
egg # NameErrorになる
変数の参照を削除する場合は、del
キーワードを使います。名前空間にバインディングされていた変数の参照が削除され、未定義の変数に戻ります。
グローバル変数
プログラム全体から使える変数のことをグローバル変数といいます。
Pythonには厳密な意味でのグローバル変数はありません。
最大の変数スコープでもモジュールというファイル単位のものでしかありません。関数やクラスの中でglobal
というキーワードを使うと、グローバル変数を使うという指定になります。
つまりglobal宣言をしたクラスや関数と同じモジュール(ファイル)を変数スコープとする変数を使用するという指定になります。
定数
Pythonに定数(1度設定した変更できない変数)はありません。ただし、定数的な意図をもった変数を定義するときは、全て大文字で書き単語と単語の間をアンダースコア(_
)で区切ります。
全て大文字の変数をみた場合は値を書き換えないように注意しましょう。
予約語
プログラミング言語には予約語という文法上意味を持つキーワードが設定されています。
予約語は関数名やクラス名として使えません。
予約語を関数名などで使おうとすると構文エラー(SyntaxError)が出ます。
以下の表にPythonの予約語をまとめておきます。
False | class | finally | is | return |
None | continue | for | lambda | try |
True | def | from | nonlocal | while |
and | del | global | not | with |
as | elif | if | or | yield |
assert | else | import | pass | break |
except | in | raise | async | await |
デバッグ・トレースバック
例外(エラー)が出され、どこでも例外処理がされなかった場合、Pythonのインタプリターはエラーのトレースバックを表示します。
トレースバックというのは、エラーが起こった時点のコールスタック情報です。エラーが起こったファイルの場所やそのコードがどこから呼ばれたかという情報が分かります。
デバッグのためには非常に有用な情報です。
英語でたくさんの文字が出てきますが、パニックにならずトレースバックをしっかり読んでエラーの場所と原因を特定しましょう。
例えば、次のサンプルプログラムを見てみましょう。このプログラムは実行するとエラーが出ます。
def main():
x = 123
y = "abc"
concat(x, y)
def concat(a, b):
return a + b
if __name__ == "__main__":
main()
このプログラムを実行すると以下のようにエラーが出ます。
Traceback (most recent call last):
File "sample_traceback.py", line 10, in <module>
main()
File "sample_traceback.py", line 4, in main
concat(x, y)
File "sample_traceback.py", line 7, in concat
return a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'
例えば、「TypeError: unsupported operand type(s) for +: 'int' and 'str'
」は日本語に訳すと、「+
はint型とstr型の間での使用をサポートされていない演算子のタイプです。」となります。
int型の変数とstr型の変数を+
で繋げようとしているのが問題だと分かります。さらに「File "sample_traceback.py", line 7, in concat
」から最終的なエラーが起きているのはファイルの7行目ということが分かります。
プログラムを書いていてエラーが出たときはまずはトレースバックを良く読むように心がけましょう。
まとめ
この記事では、Pythonの基本であるインデントやプログラムの実行方法、予約語について解説しました。
どれもPythonを学ぶ上で基本となることがらなので、しっかり抑えておきましょう。