我知道如何将hy模块导入python。我要做的就是创建一个包含something.hy代码的hy文件,然后执行以下操作...

import hy
import something
something.func('args') # assumes there is an hy function called `func`


但是,我无法弄清楚如何在python中评估包含hy代码的字符串。例如 ...

hycode = '(print "it works!")'
hy.SOMEHOW_EVALUATE(hycode)
# I'd like this to cause the string `it works!` to print out.


还是这个例子...

hycode = '(+ 39 3)'
result = hy.SOMEHOW_EVALUATE(hycode)
# I'd like result to now contain `42`


在python中使用hy时,是否可以通过这种方式评估字符串?

最佳答案

使用hy.read_strhy.eval

>>> import hy
>>> hy.read_str("(+ 39 3)")
HyExpression([
  HySymbol('+'),
  HyInteger(39),
  HyInteger(3)])
>>> hy.eval(_)
42
>>> hycode = hy.read_str('(print "it works!")')
>>> hycode
HyExpression([
  HySymbol('print'),
  HyString('it works!')])
>>> hy.eval(hycode)
it works!


如果您从Github master安装Hy,这将起作用。如果需要使它在Hy的旧版本上运行,您可以看到hy包的__init__.py实施简单

from hy.core.language import read, read_str  # NOQA
from hy.importer import hy_eval as eval  # NOQA

关于python - python3/hy-在python中评估hy表达式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46351010/

10-09 08:37