我了解如何使用hy.read_str
和hy.eval
从 python 来评估 python 中的hy
表达式。hy
但是,当我使用这种方法时,导入和全局变量不会在andpython
环境之间共享。考虑这个例子:
import hy
def hyeval(x=None):
if x is None:
return None
try:
return hy.eval(hy.read_str(str(x)))
except Exception as e:
print('!!! exception: {}'.format(e))
return None
import datetime # this is ignored within `hyeval` calls
now = hyeval('((. datetime datetime now))')
print('result: {}'.format(now))
这打印...
!!! exception: name 'datetime' is not defined
result: None
即使我执行以下操作,它也会产生相同的异常......
... etc. ...
hyeval('(import datetime)')
now = hyeval('((. datetime datetime now))')
print('result: {}'.format(now))
我必须datetime
在传递给我的hyeval
函数的字符串中显式导入...
... etc. ...
now = hyeval('((do (import datetime) (. datetime datetime now)))')
print('result: {}'.format(now))
这会正确打印以下内容...
result: 2017-09-22 09:41:49.771139
如果我通过字符串重新调用调用((. datetime datetime now))
,我必须继续(import datetime)
通过(do ...)
块重复调用。
从 python 中调用字符串时,有什么方法hy
可以在连续调用之间记住导入和全局变量hy.read_str/hy.eval
,或者在通过调用字符串时可以识别 python 全局变量和导入hy
?