66_eval.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. assert eval('1+1') == 2
  2. assert eval('[1,2,3]') == [1,2,3]
  3. def f(x):
  4. return eval('x')
  5. assert f(1) == 1
  6. a = 0
  7. assert eval('a') == 0
  8. exec('a = 1')
  9. assert a == 1
  10. def f(a):
  11. exec('a = 3')
  12. return a
  13. assert f(2) == 3
  14. exec(
  15. "exec('a = eval(\"3 + 5\")')"
  16. )
  17. assert a == 8
  18. def f():
  19. b = 1
  20. exec(
  21. "exec('b = eval(\"3 + 5\")')"
  22. )
  23. assert b == 8
  24. class G: pass
  25. def abc():
  26. g = G()
  27. exec('a=1', g.__dict__)
  28. return g.a
  29. res = abc()
  30. assert (res==1), res
  31. # test locals and globals
  32. assert eval('a', {'a': 2}) == 2
  33. globals = {'a': 1}
  34. locals = {'a': 1}
  35. exec('a=2', globals, locals)
  36. assert locals == {'a': 2}
  37. assert globals == {'a': 1}
  38. exec('a=2', globals)
  39. assert globals == {'a': 2}
  40. globals = {'a': 2}
  41. locals = {'b': 3}
  42. assert eval('a*b', globals, locals) == 6
  43. code = compile('a*b', '<string>', 'eval')
  44. assert eval(code, globals, locals) == 6
  45. try:
  46. exec('a*b*c', globals, locals)
  47. exit(1)
  48. except NameError:
  49. pass
  50. # https://github.com/pocketpy/pocketpy/issues/339
  51. code = '\nprint(x)\ndef f():\n print(x)\nf()\n'
  52. x = 33
  53. exec(code, {'x': 42})