Python.use(better)
■ 組み込み関数 eval
$ python Python 3.0.1 (r301:69597, Feb 14 2009, 19:03:52) [GCC 4.0.1 (Apple Inc. build 5490)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print(eval.__doc__) eval(source[, globals[, locals]]) -> value Evaluate the source in the context of globals and locals. The source may be a string representing a Python expression or a code object as returned by compile(). The globals must be a dictionary and locals can be any mapping, defaulting to the current globals and locals. If only globals is given, locals defaults to it. >>> eval("a+b",{"a":3},{"b":4}) 7
組み込み関数 eval は、任意のコードを評価して得られた値(None 以外)を出力します。
》作業中です《
引数 source= には、コードの断片(式)または(関数 compile によって得られる)コードオブジェクトを指定できます。
@
>>> eval("3+4")
7
式 3+4 を評価して得られる値 7 を出力します。
>>> eval(compile("3+4","","eval")) 7
式 3+4 をコンパイルして得られる「コードオブジェクト」を評価して得られる値 7 を出力します。組み込み関数 compile を利用すると(式だけでなく)文やモジュールを指定できます。
引数 globals
>>> a=0; a
0
>>> eval("a+4")
4
>>> code = compile("a+4","ex.py","eval")
>>> eval(code,{"a":3})
7
>>> a
0
■ 事例:@@
% python3.0 -i factorial.py >>> fact>>> code = compile("fact(4)"," ","eval") >>> eval(code) 24
。
>>> code = compile("n=fact(4)","","single") >>> n=3 >>> n 3 >>> eval(code) >>> n 24
@
>>> def boo(): ... print(locals()) ... >>> boo() {} >>> def boo(a,b): ... print(locals()) ... >>> boo(3,4) {'a': 3, 'b': 4} >>> def boo(a,b): ... print(globals()) ... print(locals()) ... >>> boo(3,4) {'a': 3, 'b': 4, '__builtins__':, '__package__': None, 'boo': , '__name__': '__main__', '__doc__': None} {'a': 3, 'b': 4} >>> def foo(a,b): ... return eval("a+b",locals()) ... >>> foo(3,4) 7 >>> def woo(a,b): ... return eval("a+b") ... >>> woo(3,4) 7 >>> def woo(a,b): ... return eval("a+b",globals(),{"b":5}) ... >>> woo(3,4) 8 >>>
Last updated♪09/03/15