vars, locals, globals + Python

スコープに含まれる変数を要素とする辞書を戻す関数メモ。

テストプログラムを書く

  
$ vi vars.py  

  
#!/usr/bin/env python  
# -*- coding: utf8 -*-  
g_name = "tarou"  
g_color = "red"  
  
def func():  
    name = "jirou"  
    color = "blue"  
    print "-"*10, "In function.", "-"*10  
    print "vars ->", vars()  
    print "locals ->", locals()  
    print "globals ->", globals()  
    print "name:%(name)s, color:%(color)s" % vars()  
  
if __name__ == "__main__":  
    func()  
    print "-"*10, "In __main__.", "-"*10  
    print "vars ->", vars()  
    print "locals ->", locals()  
    print "globals ->", globals()  
    print "name:%(g_name)s, color:%(g_color)s" % vars()  

実行してみる

  
$ python vars.py   
---------- In function. ----------  
vars -> {'color': 'blue', 'name': 'jirou'}  
locals -> {'color': 'blue', 'name': 'jirou'}  
globals -> {'__builtins__': , '__file__': 'vars.py', 'func': , 'g_name': 'tarou', '__name__': '__main__', 'g_color': 'red', '__doc__': None}  
name:jirou, color:blue  
---------- In __main__. ----------  
vars -> {'__builtins__': , '__file__': 'vars.py', 'func': , 'g_name': 'tarou', '__name__': '__main__', 'g_color': 'red', '__doc__': None}  
locals -> {'__builtins__': , '__file__': 'vars.py', 'func': , 'g_name': 'tarou', '__name__': '__main__', 'g_color': 'red', '__doc__': None}  
globals -> {'__builtins__': , '__file__': 'vars.py', 'func': , 'g_name': 'tarou', '__name__': '__main__', 'g_color': 'red', '__doc__': None}  
name:tarou, color:red  

雑感

"%(name)s" % (vars()) って記述がわかりやすい。