如何在 Julia 中显示字段值

法泽莱

我想知道是否有可能在 Julia 中显示字段值。

例如,这个 Python 程序wealth从消费者类中获取对象变量

   class Consumer:

    def __init__(self, w):
        "Initialize consumer with w dollars of wealth"
        self.wealth = w

    def earn(self, y):
        "The consumer earns y dollars"
        self.wealth += y

    def spend(self, x):
        "The consumer spends x dollars if feasible"
        new_wealth = self.wealth - x
        if new_wealth < 0:
            print("Insufficent funds")
        else:
            self.wealth = new_wealth

c1.wealthc1 = Consumer(10) # Create instance with initial wealth 10
c1.spend(5)
c1.wealth

财富变量是5我想知道如何将这段代码翻译成 Julia。

博古米·卡明斯基

最简单的方法很像 Python:

mutable struct Consumer
    wealth
end

function earn(c::Consumer, y)
    c.wealth += y
end

function spend(c::Consumer, y)
    c.wealth -= y
end

现在你可以像这样使用它:

julia> c1 = Consumer(10)
Consumer(10)

julia> spend(c1, 5)
5

julia> c1.wealth
5

您可以在此处阅读更多相关信息

但可能在 Julia 中你会这样写:

mutable struct ConsumerTyped{T<:Real}
    wealth::T
end

function earn(c::ConsumerTyped, y)
    c.wealth += y
end

function spend(c::ConsumerTyped, y)
    c.wealth -= y
end

表面上的工作方式几乎相同。不同之处在于T它指定了wealth. 有两个好处:您可以在代码中进行类型控制,并且函数会运行得更快。

鉴于这样的定义,您唯一需要知道的是构造函数可以以两种方式调用:

c2 = ConsumerTyped{Float64}(10) # explicitly specifies T
c3 = ConsumerTyped(10) # T implicitly derived from the argument

现在让我们比较两种类型的性能:

julia> using BenchmarkTools

julia> c1 = Consumer(10)
Consumer(10)

julia> c2 = ConsumerTyped(10)
ConsumerTyped{Int64}(10)

julia> @benchmark spend(c1, 1)
BenchmarkTools.Trial:
  memory estimate:  16 bytes
  allocs estimate:  1
  --------------
  minimum time:     56.434 ns (0.00% GC)
  median time:      57.376 ns (0.00% GC)
  mean time:        60.126 ns (0.84% GC)
  maximum time:     847.942 ns (87.69% GC)
  --------------
  samples:          10000
  evals/sample:     992

julia> @benchmark spend(c2, 1)
BenchmarkTools.Trial:
  memory estimate:  16 bytes
  allocs estimate:  1
  --------------
  minimum time:     29.858 ns (0.00% GC)
  median time:      30.791 ns (0.00% GC)
  mean time:        32.835 ns (1.63% GC)
  maximum time:     966.188 ns (90.20% GC)
  --------------
  samples:          10000
  evals/sample:     1000

你会看到你获得了大约 2 倍的加速。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Julia中交织数组

来自分类Dev

如何在Julia中实现迭代器?

来自分类Dev

如何在Julia中撤消“使用模块”?

来自分类Dev

如何在Julia中超载+ =?

来自分类Dev

如何在Julia回溯中显示呼叫者?

来自分类Dev

如何在Julia中构建POE集成

来自分类Dev

如何在Julia中组织复杂的数据

来自分类Dev

如何在Julia中创建滞后变量?

来自分类Dev

如何在Julia中不打印类型?

来自分类Dev

如何在Julia REPL中删除功能?

来自分类Dev

如何在Julia的REPL中强制显示该横幅消息?

来自分类Dev

如何在Julia中复制文件?

来自分类Dev

如何在Julia中引发特定异常

来自分类Dev

如何在Julia中绘制热图

来自分类Dev

如何在julia中解析?

来自分类Dev

如何在Julia中实现递减的for循环?

来自分类Dev

如何在Julia中设置MIME编码?

来自分类Dev

如何在Julia中获取图像的属性

来自分类Dev

如何在Julia中捕获Linux信号

来自分类Dev

如何在RMarkdown中运行Julia块

来自分类Dev

如何在Julia中实现SingleLinkedList

来自分类Dev

如何在Julia中识别独立球体?

来自分类Dev

如何在Julia中播放声音

来自分类Dev

如何在Julia中制作互动剧情

来自分类Dev

如何在Julia中交织数组

来自分类Dev

如何在Julia的REPL中强制显示该横幅消息?

来自分类Dev

如何在Julia中处理“ NA”

来自分类Dev

如何在 Julia 中检索数组数组?

来自分类Dev

如何在 julia 中运行构建的命令?