Python.use(better)

《前の記事|記事一覧|次の記事》
Python.use(better)


Python はじめました

■ 組み込み関数 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