Pythonを用いた機械学習2日目
本日は、Python 3xの基本構文について学ぶ。if文、for文、while文の書き方をはじめ、関数やクラス作成(Pythonでクラス作成は意外だった)についてまとめる。
前回の学習内容はこちらからどうぞ。
1.条件分岐と繰り返し
条件分岐でおなじみの①if文、繰り返し(ループ)処理でおなじみ②for文、③while文の記述をみていく。
①if文
>>> a = 3
>>> if a == 3:
... print("a is 3")
... else:
... pirnt("a is not 3")
...
a is 3
>>>
・他言語では{}で分岐する範囲(ブロック)を指定するが、Pythonではインデントでブロック指定する。インデントはタブキーやスペースを2つ使うこともできるが、Pythonではスペース4つが一般的である。
②for文
>>> for i in range(3):
... print(i)
...
0
1
2
>>>
・指定された回数だけ処理を繰り返す。
>>> for i in [5, 3, 7]:
... print(i)
...
5
3
7
>>> for i, e in enumerate([5, 3, 7]):
... print(i, " : ", e)
...
0 : 5
1 : 3
2 : 7
>>>
・ループの中にループを入れる場合「enumerate」がよく使われる
③while文
>>> i = 0
>>> while i < 4:
... print(i)
... i += 1
...
0
1
2
3
>>>
・最初に繰り返す条件を記述して、最後にインクリメントする。
2.関数
何度も実行する処理は、「関数」として定義できる。引数は、関数名の後に()で括って表現する。
>>> def add(a, b):
... return a + b
...
>>> add(3, 5)
8
>>> add(4, 6)
10
>>>
・戻り値はreturnを使って記述できる。値を返さない関数や、引数のない関数を指定することもできる。
3.クラス
Pythonは「オブジェクト指向言語」でもある。プログラムにおけるデータや関数などはすべてオブジェクトである。
>>> class User:
... def __init__(self, name, password):
... self.name = name
... self.password = password
... def login(self, password):
... if self.password == password:
... return True
... else:
... return False
... def logout(self):
... print("logout")
>>> a = User("admin", "password")
>>> if a.login("password"):
... a.logout()
...
logout
>>>
・クラス名の先頭は大文字にする
・クラス変数とクラス内関数(メソッド)は、インデントして定義する
・メソッドの定義は関数と同じように「def」キーワードを使用する
・メソッドを定義するときには必ず引数にselfを記述する
・メソッドに必ず一つの引数を指定する必要があり、最初の引数をselfとする慣例がある
・「__init__」は、コンストラクタと言われ、オブジェクト生成時に必ず呼びだされるメソッドで、オブジェクトが扱うデータなどを初期化する機能がある
・オブジェクト破棄時には「__del__」デストラクタというメソッドを使用するが、Pythonであまり使わない
クラス継承するときには、クラス定義時に基底クラスを次のように指定する。
class GuestUser(User):
... def __init__(self):
... super().__init__("guest", "guest")
...
>>> b = GuestUser()
>>> if b.login("guest"):
... b.logout()
...
logout
>>>
・多くの言語同様に、Pythonでも、関連するデータやメソッドをクラスとしてまとめて、クラスの外から内部の変数やメソッドに直接アクセスできないように「カプセル化」できる
・変数やメソッドに対してpublicやprivateなどのアクセス属性を指定することはないが、変数やメソッドの前に「_」や「__」をつける記述が使われる
>>> class User:
... def __init__(self, name, password):
... self.name = name
... self.__password = password
...
>>> c = User("admin", "password")
>>> c.name # __で始まらないものはアクセスできる
'admin'
>>> c.__password # __で始まるものはアクセスできない
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'User' object has no attribute '__password'
>>>
・「_」ではじまる変数やメソッドには外部から参照しないというルールがある
・「__」ではじまる変数やメソッドの場合は、アクセスすると、例外が発生する
次の学習では、練習問題にも取り組んでいます。よかったらこちらもどうぞ。