「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年12月10日改訂)。

MENU

Pythonをゆっくりていねいに学ぶ(その12/X)

 Pythonを真面目にゆっくり学ぶべく

を参考に学んでいきます*1

5. Pyの化粧箱:モジュール、パッケージ、プログラム

5.3.4 スタック+キュー=デック

 \mathrm{deque}は、両端キューを指し、スタックとキューの両方の機能を持っている。シーケンスのどちらの端に対しても要素を追加・削除できるようにしたいときに便利である。

######################################
### 単語が回文なのかをチェックする ###
######################################

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によるクラスの定義

 \mathrm{Python}でカスタム・オブジェクトを用いるには、\mathrm{class}キーワードでまずクラスを定義する。クラスはオブジェクトの鋳型のようなものである*2。クラス定義から個々のオブジェクトを作るときにそれを初期化するためのメソッドとして__\mathrm{init}__()を追加する。__\mathrm{init}__()の引数は\mathrm{self}でなければならない。

############################
### クラスとオブジェクト ###
############################

# まずは最も簡単なクラスとして空クラスを定義
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)
  • \mathrm{Person}クラスの定義を探し出す。
  • メモリ内に新しいオブジェクトのインスタンスを作成する。
  • 新しく作ったオブジェクトを\mathrm{self}、もう一つの引数を\mathrm{name}として渡してオブジェクトの__\mathrm{init}__メソッドを呼び出す。
  • \mathrm{name}の値をオブジェクトに格納する。
  • その新しオブジェクトを返す。
  • オブジェクトに\mathrm{hunter}という名前を与える。

 渡した\mathrm{name}は属性としてオブジェクト共に保存される。属性は直接読み書きできる。

*1:第2版が出ているものの初版しか持っていないのでこちらで。

*2:VBAの構造体のようなものである。

プライバシーポリシー お問い合わせ