【问题标题】:How to use julia string macros with a variable?如何将 julia 字符串宏与变量一起使用?
【发布时间】:2017-07-30 22:03:04
【问题描述】:

抱歉,如果这个问题已经得到解答,但是当我向它提供一个表示字符串而不是简单字符串的变量时,我在使用 PyCall 库中包含的“py”字符串宏时遇到了令人惊讶的困难。

例子:

@py_str "2 + 2" 

返回 4

z = "2 + 2"
@py_str z

导致 interpolate_pycode 不采用 Expr 参数的错误,@py_str ($(z)) 也是如此。

如何将@py_str 传递给字符串变量?

(澄清一下 - 上面是一个玩具示例,我将它用于真正需要的应用程序)。

【问题讨论】:

  • 不就是py""" """(即没有_str)吗?

标签: macros julia


【解决方案1】:

@py_str "\$\$z" 是你的朋友(在 REPL 中使用 ?@py_str 查看宏帮助)。最好写和py"$$z"一样的宏

来自 REPL 帮助(相关部分加粗):

py".....python 代码....."

在主 Python 模块中评估给定的 Python 代码字符串。

如果字符串是单行(没有换行符),那么 Python 计算表达式并返回结果。如果字符串是
多行(包含换行符),然后编译 Python 代码 并在 ma​​in Python 模块中进行评估,没有返回任何内容。

如果 o 选项附加到字符串中,如 py"..."o,那么 返回值是一个未转换的 PyObject;否则,它是
如果可能,自动转换为原生 Julia 类型。

出现在 Python 代码中的任何 $var 或 $(expr) 表达式 (在 cmets 或字符串文字中除外)在 Julia 中进行评估,并且 通过自动生成的全局变量传递给 Python。这允许 您可以将 Julia 值“插入”到 Python 代码中。

类似地,Python 代码中的 $$var 或 $$(expr) 表达式是 在 Julia 中求值,通过字符串转换为字符串,然后粘贴
进入 Python 代码。这允许您评估代码所在的代码 它本身是由 Julia 表达式生成的。

PS 小错字 ny 而不是 any 在包源中。

【讨论】:

  • 非常感谢!
  • 现在我仍然无法使用变量来使用 PyCall 宏。当我尝试以下 `py" from math import sin print(sin(2))"
  • 现在我在表示多行 python 程序的字符串上调用 py_str 时遇到了麻烦,我相信这个问题与 julia/python 表示换行符的方式有关。 '当我调用 'py"y = 2 + 2(newline) print(y)"` 时,它会打印 4;当我定义z = "y = 2 + 2(newline) print(y)" 然后调用py"$$z" 时出现语法错误。有什么建议吗?
  • PyCall 包中有一个pyimport 函数。可能它对from math... 有帮助。此外,PyCall 的文档非常清晰,位于:PyCall docs。事实上,第一个示例使用@pyimport math 并使用sin
猜你喜欢
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2019-11-06
  • 2019-06-18
  • 1970-01-01
  • 2016-09-11
  • 2016-04-24
相关资源
最近更新 更多