検索
特集

Pythonの文法、基礎の基礎特集:Visual Studioで始めるPythonプログラミング(1/4 ページ)

今回は、Pythonの制御構造と、リスト/タプル/辞書/集合という4つのデータ型について超速で見ていく。

Share
Tweet
LINE
Hatena
「特集:Visual Studioで始めるPythonプログラミング」のインデックス

連載目次

 今回は、Pythonの制御構造と、リスト/タプル/辞書/集合という4つのデータ型について超速で見ていく。四則演算や基本データ型の種類、演算子の種類と優先順位など、通常の入門記事にありそうな要素は省略する。また、C#などの言語の経験を対象として「ふ〜ん、Pythonではそうなってるのね」と感じてもらうことを目的として、概要をさらりと眺めるだけで詳細には触れないので、詳しく知りたい方はPythonのドキュメントや各種の入門書を参照してほしい。

変数定義と制御構造

 以下ではPTVSの[Interactive]ウィンドウを使って、変数定義、制御構造といった基本的な構文要素を見ていこう。ここではAnaconda 4.1.1で提供されるPython 3.5.2を使用している。

[Interactive]ウィンドウ
[Interactive]ウィンドウ

 今回は[Interactive]ウィンドウとの対話だけで話を進めていく。プロジェクトは作成しない。まずは以下からだ。

>>> a = 100
>>> a
100
>>> b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
>>> type(a)
<class 'int'>
>>> a = 'insider.net'
>>> type(a)
<class 'str'>


変数定義

 上記の結果からまず分かるのは、代入をすることで変数が定義されることだ(変数宣言は不要。未定義の変数を使おうとすると例外「TypeError」が発生する)。変数に型はない。型を持つのは変数が参照しているオブジェクトであり、ある変数に異なる型のオブジェクトを代入することも可能だ(それが推奨されるかどうかは別の話)。なお、単純なオブジェクトの型はtype関数で調べられる(継承関係を調べるにはisinstance関数の利用が推奨される)。

 次にPythonの制御構造を幾つか紹介する。以下は1〜10を要素とする配列(Pythonでは実際にはこれはリスト)の中から偶数を表示するコードだ。変数aが参照しているのはリストオブジェクトだ(後述)。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> i = 0
>>> while i < len(a):
...   if not a[i] % 2:
...     print(a[i])
...   i += 1
...
2
4
6
8
10


while文とif文

 見ての通り、while文もif文も基本的な構文はC#などのそれとそう変わらない。ただし、C系統の言語とは異なり、条件式を囲むかっこは不要だ。また、while文にしてもif文にしても、そのボディー(コードブロック)はインデントを付けて表現する。この場合はif文と次の代入文がwhile文のコードブロックとなる。if文のコードブロックはprint関数呼び出しとなる。

 なお、len関数は引数に渡したオブジェクトの長さ/要素数を返す、Pythonの組み込み関数である。もう1つ。Pythonにはインクリメント/デクリメント演算子はないので、変数の値を1加算するには上記のように加算代入演算子を使用する。

 それから、if文の条件式を見ると分かる通り、Pythonではブーリアン値以外の値も条件として評価される。

 while文の構文を以下に示す。else節に記述した内容は条件式が成立しなくなった時点で実行される(ループ中でbreak文が実行された場合には、else節は実行されないので、これを利用してある条件に応じて、whileループ終了後の処理に変化を付けられる。ただし、利用頻度は高くはないだろう)。

while 条件式:
  ボディー
else:
  ボディー


while文の構文

 if文の構文は次の通りだ。C#などの言語と明確に異なるのは、「else if」ではなく「elif」キーワードを使用する点だ。もちろん、elif節とelse節は省略可能である。

if 条件式1:
  ボディー
elif 条件式2:
  ボディー
else:
  ボディー


if文の構文

 なお、Pythonにはswitch文は存在しない。条件分岐を行う場合にはif文を使用する。for文はもちろん存在している。以下にその利用例を示す。これは上のwhileループをfor文で書き直したものだ。

>>> for item in a:
...   if not item % 2:
...     print(item)


for文の利用例

 これはC系統の言語に見られる「for (初期化式; 継続条件式; ループ式)」形式のfor文とは異なる。むしろ、C#のforeach文に近い形式のものだ。for文の構文を以下に示す。

for ループ内で使用する変数 in 式:
  ボディー
else:
  ボディー


for文の構文

 上の「式」は反復可能なオブジェクトを返すものを記述する。反復可能なオブジェクトとは、そのオブジェクトが含む要素を一度に1つ返送可能なオブジェクトのことだ。例えば、上ではPythonのリストを渡している。これ以外には、文字列、タプルなどの「シーケンス型」(後述)に分類されるオブジェクトや、辞書やファイル、__iter__/__getitem__メソッドを持つクラスのインスタンスなどが反復可能なオブジェクトとして扱える(詳細については「用語集」などからリンクをたどってほしい)。

 反復可能なオブジェクトを返す典型的な式としてはもう1つ、range関数がある。この関数の戻り値であるrangeオブジェクトは、リストのように各要素をメモリ上に確保するのではなく、指定された範囲/差分を管理するオブジェクトであり、反復処理を行うたびにそれが管理している範囲/差分を基に整数列を生成してくれる。以下に例を示す。

>>> range(1, 11, 1)
range(1, 11)
>>> for num in range(1, 11, 1):
...   if not num % 2:
...     print(num)
...


range関数の使用例

 range関数の引数は順に「初期値、終端値、差分」となっている(終端値は生成される数列には含まれないので、上では「11」を指定している。つまり、これで範囲1〜10、差分1の等差数列が生成される)。あるいは終端値のみを指定する「range(終端値)」という呼び出しも可能だ(この場合、初期値は0、差分は1となる)。

 次ページでは、リスト、タプル、辞書などのデータ型について見ていこう。

Copyright© Digital Advantage Corp. All Rights Reserved.

       | 次のページへ
ページトップに戻る