首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python3 3/hy-当使用hy.eval时,导入和全局不共享

python3 3/hy-当使用hy.eval时,导入和全局不共享
EN

Stack Overflow用户
提问于 2017-09-22 13:52:55
回答 1查看 109关注 0票数 1

我了解如何从python中使用hy.read_strhy.eval来计算python中的hy表达式。但是,当我使用这种方法时,导入和全局在hypython环境之间并不共享。考虑一下这个例子:

代码语言:javascript
复制
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))

这些指纹..。

代码语言:javascript
复制
!!! exception: name 'datetime' is not defined
result: None

即使我做了以下操作,也会产生同样的异常.

代码语言:javascript
复制
... etc. ...
hyeval('(import datetime)')
now = hyeval('((. datetime datetime now))')
print('result: {}'.format(now))

我必须在传递给我的datetime函数的字符串中显式导入hyeval .

代码语言:javascript
复制
... etc. ...
now = hyeval('((do (import datetime) (. datetime datetime now)))')
print('result: {}'.format(now))

这正确地打印了以下内容..。

代码语言:javascript
复制
result: 2017-09-22 09:41:49.771139

如果我通过字符串重新调用((. datetime datetime now))调用,则必须继续通过(do ...)块重复(import datetime)调用。

在从python内部调用hy字符串时,是否有任何方式可以在连续调用hy.read_str/hy.eval期间记住导入和全局,或者在通过hy调用字符串时可以识别python和hy

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 14:29:56

我知道了:如果hy.eval的第二个参数是globals(),那么在执行hy字符串计算时,python环境的globals和imports是可用的.

代码语言:javascript
复制
import hy
def hyeval(x=None, g=None):
    if x is None:
        return None
    try:
        if not g:
            g = globals()
        return hy.eval(hy.read_str(str(x)), g)
    except Exception as e:
        print('!!! exception: {}'.format(e))
        return None
import datetime
now = hyeval('((. datetime datetime now))')
print('result: {}'.format(now))

它正确地打印了以下内容..。

代码语言:javascript
复制
result: 2017-09-22 10:25:36.752656
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46366446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档