Pythonを真面目にゆっくり学ぶべく
を参考に学んでいきます*1。
前回
5. Pyの化粧箱:モジュール、パッケージ、プログラム
5.3.4 スタック+キュー=デック
は、両端キューを指し、スタックとキューの両方の機能を持っている。シーケンスのどちらの端に対しても要素を追加・削除できるようにしたいときに便利である。
###################################### ### 単語が回文なのかをチェックする ### ###################################### def palindrome(word): from collections import deque dq = deque(word) while len(dq) > 1: if dq.popleft() != dq.pop(): return False return True palindrome('halibut')
5.3.5 itertoolsによる反復処理
########################### ### itertoolsによる反復 ### ########################### # chain:引数全てを1つのイテラブルかのように扱う import itertools for item in itertools.chain([1,2],['a','b']): print(item) # cycle: 無限反復子 Ctrl+Cで強制終了 import itertools for item in itertools.cycle([1,2]): print(item) # accumulate:要素を一つにまとめた値を反復 # デフォルト(=第2引数を非入力)だとその要素までの全要素の累積和 import itertools for item in itertools.accumulate([1,2,3,4,5]): print(item) import itertools def multiply(a, b): return a * b for item in itertools.accumulate([1,2,3,4,5],multiply): print(item)
5.3.6 pprint()
インデント等を綺麗に成型して出力する。
from collections import OrderedDict from pprint import pprint quotes = OrderedDict([ ('Moe','A wise guy, huh?'), ('Larry', 'Ow!'), ('Curly', 'Nyuk nyuk!') ]) print(quotes) pprint(quotes)
6. オブジェクトとクラス
6.1 オブジェクトとは何か
オブジェクトとは何らかの具体的なものの一意なインスタンス(実体)を指しており、データ(変数、属性と呼ばれる)およびコード(関数、メソッドと呼ばれる)の両方を含む。そのためもし自作オブジェクトを新たに定義する場合、オブジェクトの内容を示すクラスを作成しなければならない。
6.2 classによるクラスの定義
でカスタム・オブジェクトを用いるには、キーワードでまずクラスを定義する。クラスはオブジェクトの鋳型のようなものである*2。クラス定義から個々のオブジェクトを作るときにそれを初期化するためのメソッドとして____()を追加する。____()の引数はでなければならない。
############################ ### クラスとオブジェクト ### ############################ # まずは最も簡単なクラスとして空クラスを定義 class Person(): pass # クラスが空であることを明記するのにpassと記載 someone = Person() # クラス名を関数のように呼び出すことでオブジェクトを作成する # 特殊メソッド __init__を含むクラス class Person(): def __init__(self): pass
実例として、クラスを以下のように呼び出す:
# もう少しちゃんとしたクラス class Person(): def __init__(self, name): self.name = name hunter = Person('Elmer Fudd') print(hunter.name)
- クラスの定義を探し出す。
- メモリ内に新しいオブジェクトのインスタンスを作成する。
- 新しく作ったオブジェクトを、もう一つの引数をとして渡してオブジェクトの____メソッドを呼び出す。
- の値をオブジェクトに格納する。
- その新しオブジェクトを返す。
- オブジェクトにという名前を与える。
渡したは属性としてオブジェクト共に保存される。属性は直接読み書きできる。