如果这已经得到回答,请道歉,但是当我向其提供表示字符串而不是简单字符串的变量时,我使用PyCall库中包含的“py”字符串宏时非常困难。
示例:
@py_str "2 + 2"
返回4
z = "2 + 2"
@py_str z
导致一个错误,即interpolate_pycode不接受Expr参数,@ py_str($(z))也是如此。
如何将@py_str传递给字符串变量?
(只是为了澄清 - 上面是一个玩具示例,我将它用于真正需要的应用程序)。
答案 0 :(得分:2)
@py_str "\$\$z"
是你的朋友(在REPL中查看使用?@py_str的宏帮助)。最好将同一个宏写为py"$$z"
来自REPL帮助(粗体相关部分):
py“..... python code .....”
在主Python模块中评估给定的Python代码字符串。
如果字符串是单行(没有换行符),那么Python 计算表达式并返回结果。如果字符串是
多行(包含换行符),然后编译Python代码 并在主 Python模块中进行评估,并且不返回任何内容。如果o选项附加到字符串,如py“...”o,那么 返回值是未转换的PyObject;否则,是 如果可能,自动转换为原生Julia类型。
Python代码中出现的任何$ var或$(expr)表达式 (在评论或字符串文字中除外)在Julia和 通过自动生成的全局变量传递给Python。这允许 你将Julia值“插入”到Python代码中。
类似地,Python代码中的ny $$ var或$$(expr)表达式是 在Julia中评估,通过字符串转换为字符串,并粘贴到 进入Python代码。这允许您评估代码所在的代码 本身是由Julia表达式生成的。
PS小错误 ny 而不是任何在包源中。