みんPy(改訂版) 読書メモ Chapter 12
Chapter12 スコープとオブジェクト
Pythonのスコープ
スコープみっつ
- ビルトインスコープ: 組み込み関数や、組み込み変数が属するスコープ。このスコープに新たに定義することはできない。
- モジュール(グローバル)スコープ: モジュールのトップレベルのスコープ。Pythonの最大スコープはモジュールごとなので、厳密なグローバルスコープとは異なる。
- ローカルスコープ: 関数定義内のスコープ。
global
文
ローカルスコープでの変数定義時に global
文を指定すると、その変数をグローバル変数で定義されたものとして扱う。
def func(): global b b=10 return func() print b #=> 10
また、関数内からグローバルスコープに定義された変数は、参照できるが通常代入はできない。この場合にも global
とすることで、グローバルスコープの変数への代入が可能となる(参照: http://inside.ascade.co.jp/node/41)
Pythonのオブジェクト
dir()
オブジェクトに定義されているアトリビュートを一覧できる。
関数オブジェクト
Pythonでは関数は first-class object なので、変数に代入することができる。def
による関数定義は、定義した名前の変数に関数オブジェクトを代入しているのと等しい。
型検査
type()
: 引数に渡したオブジェクトの型を返す組み込み関数(type
型を返す(ややこしい))isinstance()
: 第一引数のオブジェクトが、第二引数の型であるかを返す。issubclass()
: 第一引数のクラスが、第二引数のクラスであるかを返す。
getattr()
第一引数のオブジェクトから第二引数に指定した名前(文字列)を持つアトリビュートの値を取得する。