みん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()

第一引数のオブジェクトから第二引数に指定した名前(文字列)を持つアトリビュートの値を取得する。