Python 再入門(3.2)
参考書籍
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (8件) を見る
関数
- 位置指定引数
- キーワード引数
>>> def func(a, b, c, d, e): ... print [a, b, c, d, e] ... >>> func(1, 2, 3, 4, 5) [1, 2, 3, 4, 5] >>> func(1, 2, 3, e = 5, d = 4) [1, 2, 3, 4, 5] >>> bc = (2, 3) >>> de = { 'd': 4, 'e': 5 } >>> func(1, *bc, **de) [1, 2, 3, 4, 5]
- デフォルト引数
>>> def func(a, b = 2, c = 3): ... print [a, b, c] ... >>> func(1) [1, 2, 3] >>> func(1, '2') [1, '2', 3]
- 可変長引数
- 可変長引数の後に他の変数を指定する事ができるのは Python 3.0 以降
>>> func(1, 2, 3, x = 4, y = 5) [1, (2, 3), {'y': 5, 'x': 4}]
- return
- global
- nonlocal
- クロージャ
ジェネレータ関数
- __next__ メソッドが呼び出される度に yield までが実行され、yield 式で指定された値を返す
- send(), throw(), close()
- サブジェネレータ: yield from ** Python 3.3 以降
高階関数と lambda 式
- lambda
関数デコレータ
- @デコレータ関数名
- デコレータ関数は関数を受け取って関数を返す
ドキュメンテーション文字列
- docstring """
関数アノテーション
- Python 3 以降
- : 注釈
- -> 注釈
def add(left: '説明', right: '説明') -> '説明': return left + right
クラス
クラス定義
class Hoge: """" ... """ def func(self, arg): ... class Blank: pass
- 属性を自由に追加・削除できる
>>> obj = Blank() >>> obj.x = 1 >>> obj.x 1 >>> del obj.x >>> obj.x Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: Blank instance has no attribute 'x'
メソッド
- 最低1つの引数(自分自身)を受け取る
- この先頭の引数は慣習的に self と名付ける
コンストラクタ
- __init__
デストラクタ
- __del__
- ほとんどの場合定義しない
インスタンスアロケータ
- __new__
- 第1引数はクラスオブジェクト
- immutable な場合の初期化など
継承
class Base: pass class Sub(Base): pass
- super()
多重継承
class Hoge(A, B, C): pass
特殊メソッド
- 特殊なメソッドをオーバーライドすることで、演算子オーバーロードなどが実現できる。
プライベートメンバ
- アンダースコア2つで始まり、末尾がアンダースコアなしか1つの名前をつけると、外部からその名前で参照できなくなる。
ディスクリプタ
- 特殊メソッド __get__(), __set__(), __delete__() などを持つオブジェクトをディスクリプタと呼ぶ
- obj.attr がディスクリプタであれば obj.attr.__get__() が呼ばれる
コンテキストマネージャ
- with 文でコンテキストを提供するオブジェクトをコンテキストマネージャと呼ぶ
- with 文の開始時にブロックの実行に必要なコンテキストを用意し、ブロック終了時にコンテキストを解放する
- __enter__(self), __exit__(self, exc_type, exc_value, traceback)
プロパティ
- 組み込みのデコレータ property を使ってアクセサメソッドを通常の属性アクセスの様に使える
クラスメソッド
- デコレータ classmethod
- デコレータ staticmethod
- 第1引数への追加はない
クラスデコレータとメタクラス
- クラスオブジェクトを受け取って、クラスオブジェクトを返すメソッド
- クラス定義時にキーワード引数 metaclass でメタクラスを指定出来る
- 省略時は type がメタクラスとなる
- __new__(metacls, bases, classdict), __init__(cls, bases, classdict)
- クラスオブジェクトの生成と初期化のために呼ばれる
- bases: 基底クラスのタプル
- classdict: クラスのメンバを格納した辞書
抽象基底クラス(Abstract Base Class: ABC)
- Python 3.0 以降
- ABCMeta
- register()
- abstractmethod デコレータ
- 抽象基底クラスを基底クラスとするクラスでは、全ての抽象メソッドがオーバーライドされていなければインスタンスを生成できない
モジュールとパッケージ
モジュール
- import モジュール名
- from モジュール名 import メンバ名
- import モジュール名 as 名前
- sys.path でモジュールの検索パスを得られる
- システム固有のデフォルトディレクトリと環境変数 PYTHONPATH で指定したディレクトリを含む
- sys.path の先頭はスクリプトファイルのディレクトリ
パッケージ
- 複数のファイルに分けて機能を提供する事ができる
パッケージ名/ ┆ ├\_\_init\_\_.py ├モジュール名.py ├モジュール名.py └サブパッケージ名/ └モジュール名.py
- __init__.py は中身が空でもかまわない
- パッケージ内のモジュールから同じパッケージ内の別のモジュールをインポートする場合、相対形式で指定出来る
名前空間パッケージ
- Python 3.3 以降
- __init__.py は置けない