gpt4 book ai didi

julia @printf 改变我的变量

转载 作者:行者123 更新时间:2023-12-04 16:59:37 29 4
gpt4 key购买 nike

我发现很难用 Julia 格式化数字:

b = 1.111111
bb = @printf "test : %5.2f" b
bb

test : 1.11

那没关系。
using PyPlot 
annotate(@printf "test : %5.2f" b, xy=[1;1])

test :
type: non-boolean (Array{Bool,1}) used in boolean context
while loading In[16], in expression starting on line 2

我不明白,因为我希望 @printf 的结果是一个字符串。所以如果有人可以解释我应该怎么做
"test : %5.2f" % b

在 Python 中。

最后,这是奇怪的事情:
b
1

b 已被强制转换为 Int。你会称之为错误吗?

我使用 Julia 0.3.2 和 Jupyter 3.1

最佳答案

宏解析(特别是在函数调用的上下文中)有点挑剔。您可以通过引用它来了解 Julia 是如何解析它的:

julia> :(annotate(@printf "test : %5.2f" b, xy=[1;1]))
:(annotate(@printf "test : %5.2f" (b,xy) = [1,1]))

如您所见,宏比函数参数“更贪婪”。整个 b, xy=[1;1]部分被视为 @printf 的唯一参数宏。这解释了为什么 b 的值变化—— =已将上下文从表示关键字参数更改为一般元组赋值!

我强烈建议在更复杂的表达式中使用宏时使用类似函数的语法,如下所示:
annotate(@sprintf("test : %5.2f", b), xy=[1;1])

最后,请注意我已经更改了 @printf@sprintf .前者返回 nothing并简单地打印出值,而后者返回一个可以传递给函数的字符串。

关于julia @printf 改变我的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378710/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com