Evaluating Python code without any preparsing

class sage.misc.python.Python[source]

Bases: object

Allow for evaluating a chunk of code without any preparsing.

eval(x, globals, locals=None)[source]

Evaluate x with given globals; locals is completely ignored.

This is specifically meant for evaluating code blocks with %python in the notebook.

INPUT:

  • x – string

  • globals – dictionary

  • locals – completely IGNORED

EXAMPLES:

sage: from sage.misc.python import Python
sage: python = Python()
sage: python.eval('2+2', globals())
4
''
>>> from sage.all import *
>>> from sage.misc.python import Python
>>> python = Python()
>>> python.eval('2+2', globals())
4
''

Any variables that are set during evaluation of the block will propagate to the globals dictionary.

sage: python.eval('a=5\nb=7\na+b', globals())
12
''
sage: b
7
>>> from sage.all import *
>>> python.eval('a=5\nb=7\na+b', globals())
12
''
>>> b
7

The locals variable is ignored – it is there only for completeness. It is ignored since otherwise the following will not work:

sage: python.eval("def foo():\n   return 'foo'\nprint(foo())\ndef mumble():\n    print('mumble {}'.format(foo()))\nmumble()", globals())
foo
mumble foo
''
sage: mumble
<function mumble at ...>
>>> from sage.all import *
>>> python.eval("def foo():\n   return 'foo'\nprint(foo())\ndef mumble():\n    print('mumble {}'.format(foo()))\nmumble()", globals())
foo
mumble foo
''
>>> mumble
<function mumble at ...>