TensorFlowやChainerに興味があるけど、Python未経験の技術者が最低限知っておいた方がいい基礎文法まとめ:特集:タイニーレファレンス(1/6 ページ)
Python 3の基本となる構文要素や、データ型の使い方、関数とクラスの定義方法を構文やサンプルコード多めでギュッと濃縮。
本稿では、Python 3の構文要素、文字列/リスト/タプルなどのデータ構造、関数とクラスの定義など、Python 3プログラミングの基本となる部分について、その構文や使い方をサンプルコードを多めにギュッとまとめていく(「タイニー」というには少々長くなってしまったので組み込み関数のレファレンスについては稿を分けてまとめることにする)。
最近では機械学習が急速に広まっていることから、そのためのメジャーなフレームワークが多数存在しているこの言語に興味を持ったというPython初心者の方も多いだろう。そうした方々のお役に立てば幸いだ。
概要
Pythonはオープンソースで開発が行われているスクリプト言語だ。シンプルな構文体系、曖昧な記述を許さない(例:暗黙の型変換がない)、「何かをする」コードは大体似たコードになる、バッテリー同梱(標準の状態で多くの機能/ライブラリが提供されている)といった特徴がある。中でもインデントを使用してコードブロックを表現するというのは、Pythonの大きな特徴の1つである(後述)。
Pythonには現在、Python 2系列とPython 3系列の2種類のメジャーバージョンがある。Python 2もまだ広く使われているが、サポート期限が2020年になっていることから、今後はPython 3の使用が広まっていくだろう。本稿では後者に焦点を絞って、その基本となる部分をレファレンス的にまとめていく。
対話シェル
Pythonでは「python」コマンドにスクリプトファイルを指定してプログラムを実行したり、単独で「python」コマンドを実行し、対話的にコードを試したりできる。また、IDLE(Integrated DeveLopment Environment)と呼ばれる環境も標準で用意されている。
対話環境では「>>>」プロンプトに対して入力していくことで、対話的にPythonコードを実行できる。対話環境を終了するには「quit()」もしくは「exit()」と入力する。「help()」と入力すると、対話的なヘルプ環境に移行する(終了するには「quit」をヘルプ用のプロンプト「help>」に入力する)。あるいは「help(調べたいもの)」と入力することで、そのドキュメントを表示できる(例:「help(int)」)。
複数の行で構成される文では先頭行を入力し[Enter]キーを押すと、プロンプトが「...」に変わるので、そこにコードを続けて入力していく。このときにはインデント量に気を付ける必要がある。そこで次にインデントについて簡単に解説する。なお、Pythonの対話的環境として、他にもIPythonなどがある。興味のある方は調べてみてほしい。
インデント
上述したように、Pythonではコードブロック(一塊のコードの実行単位)はインデントを用いて表現される。例えば、if文のelse節は1つのコードブロックとして同じインデント量のコードを用いて表現される。以下に例を示す。
if True:
print("true")
else:
print("false")
「1つのコードブロックは同じインデント量で示す」ことから、このコードではif節(条件が成立したときに実行されるコードブロック)とelse節(条件が成立しなかったときに実行されるコードブロック)ではインデント量が異なっているが、これは正しいPythonコードとなる(が、見にくいのでこのような書き方はするべきではない)。
また、1つのコードブロック内で空白文字とタブ文字を混在させることはできない。以下に例を示す(黄色い空白文字でタブを表すことにする)。なお、Pythonではタブ幅は「8」になっている。つまり、タブ文字でインデントを付ける場合、Python内部では8の倍数カラムにコードがそろうようにタブ文字が空白文字に変換される。ただし、内部的にそうなっているからといって、1つのコードブロック内で空白文字をタブ位置に合わせる形で、タブ文字と混在させることはできない。
if False:
print("true")
else:
print("false") # タブ文字でインデント
print("false!") # 空白文字でインデント
このコードを実行すると次のように例外が発生する。
> python bad_tab.py
File "bad_tab.py", line 5
print("one more false")
^
TabError: inconsistent use of tabs and spaces in indentation
簡易なテキストエディタ以外では、インデントに使う文字種を指定できるので、実際には空白文字とタブ文字を混在させることはそれほど多くないだろうが気を付けておきたい。
また、インデントでコードブロックを表現するので、次のようなコードは書けない。
l = [1, 2, 3, 4, 5]
for item in l:
print(item)
「print(item)」行がインデントされていないので、これはfor文のループ内で実行するコードブロックとはならない。この場合には「IndentationError: expected an indented block」が発生する。正しくは次のようにする必要がある。
l = [1, 2, 3, 4, 5]
for item in l:
print(item)
また、不要なコードブロックを形成することもできない。以下に例を示す。
if False:
print("true")
print("true")
このコードを実行すると次のようになる。
>python bad_tab.py
File "bad_tab.py", line 3
print("true")
^
IndentationError: unexpected indent
このようにインデントでコードブロックを表現すると共に、不要なインデントは付けられないようにすることで、Pythonではある程度のコードの統一性を図っている。
コメント
本稿ではサンプルコードの各所にコメントを埋め込んでいるので、これについてもここで簡単に説明をしておこう。
コメントは「#」で始まり行末で終了する。複数行コメントはないので、複数行にわたってコメントを記述するには各行のコメントの始まりに「#」を記述する必要がある。以下に例を示す。
# 全てがコメントの行
# 複数行コメントはないので、コメントの先頭には常に「#」を付加する
def nop():
pass # 何もしない関数nop
nop() # 関数呼び出し
本稿の表記について
本稿では以下のような表記を用いて、構文やメソッド/操作を表す。まず、操作(組み込み関数など)やあるオブジェクトに対する操作を表を利用して一覧する。
操作/メソッド | 説明 |
---|---|
l.reverse() | リストを逆順に並べ替える |
s.count(sub[, start[, end]]) | start〜end内でのsubの発生回数を取得 |
操作やメソッドの一覧の例 |
このとき、省略可能な引数指定については[]で囲んで表記する。上の例ならcountメソッドのstart引数とend引数は省略可能だ。引数の意味については「説明」を参照のこと。また、メソッドについては、リストなら「l.メソッド名(引数リスト)」のようにメソッド名の前にオブジェクトを前置するように表記する(上の「s」は「string」を表す「s」となる。なお、リストやタプルでもcountメソッドを呼び出せるが、これらについては1引数のものしか用意されていない)。
また、それらを実際に使用するサンプルコードは対話環境で「>>>」プロンプトに入力したものではなく、Pythonスクリプトとして記述している。コードを対話シェルにコピー&ペーストして実際にコードを試せるようになっているので、気になる部分は自分で試していただきたい。以下に例を示す。
# リストの加算
a = list(range(5)) # rangeオブジェクトからlistオブジェクトを生成
b = list(range(5,10))
print(a + b) # 出力結果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
説明は上で述べたコメントを利用して、コード中に埋め込んでいる場合もある。また、何かの値を出力するには組み込み関数printを使用している。その出力結果も「# 出力結果: ……」のようにコメントとして埋め込んである。
概要についてはここまでとして、次ページではPythonの組み込み型について、その幾つかをまとめる。
Copyright© Digital Advantage Corp. All Rights Reserved.