【问题标题】:Jython - is it faster to use Python data structures or Java ones?Jython - 使用 Python 数据结构还是 Java 数据结构更快?
【发布时间】:2012-06-24 14:24:46
【问题描述】:

我试图了解是否以及在什么情况下应该使用 Python 类和/或 Java 类。

如果制作一种专业的字典/地图类,应该从 Python 的 dict 中创建一个子类,还是从 Java 的 HashMap 或 TreeMap 等中创建一个子类?

使用 Python 是很有诱惑力的,因为它们更简单、更性感。但是,Jython 运行速度相对较慢的一个原因(在我看来是这样)似乎与动态类型有关。我最好说我对这一切都不是很清楚,也没有花时间研究 Python/Jython 解释器代码,真可惜。

无论如何,我只是想到 Java 类可能运行得更快,因为代码可能需要做的工作更少。 OTOH 也许它必须做更多。或者也许里面什么都没有。有人知道吗?

【问题讨论】:

  • 使用 Python 循环还是 Java 循环更快?如果测试呢?还是变量声明?
  • 嗯...不清楚这是否是恶意评论。我的问题是关于 Jython,所以对我来说似乎并不那么愚蠢。
  • @katrielalex 不,这不是一个有效的观点:在 Jython 中,您可以在两种不同的语言结构之间进行选择,并且询问是否以及在什么情况下应该选择其中一种并非易事
  • @mikerodent 抱歉,已删除评论。我同意六角鹦鹉所说的。

标签: java python jython


【解决方案1】:

使用 Jython 的目的是您可以编写 Python 代码并让它在 JVM 上运行。不要通过将 Python 变成 Java 来破坏这一点。

如果 -- if -- 事实证明你的数据结构太慢,你可以直接用 Java 版本替换它。但那是针对编程的优化阶段,后面会出现。


我想我应该试着回答你的问题。我猜测使用本机 Java 结构会更快(因为 JVM 可以比 Python 解释器推断出更多关于它们的信息),但这可能会被与 Jython 接口所需的额外处理抵消。只有测试才能证明!

【讨论】:

  • 也许您还没有完全理解这个问题:我不是在谈论集成 Jython 代码和 Java 代码,我知道。我说的是 within Jython 代码的主体:来自 dict 的子类或来自 HashMap 的子类。
  • @mikerodent 不,我已经理解了这个问题。我认为您应该从dict 继承,因为您应该编写 Python 代码。是从HashMap 继承而不是“集成 Jython 代码和 Java 代码”吗?
  • 呃,不是的。我建议您参考 Jython 权威指南的第 10 章:集成 Java 是关于从 Jython 代码中调用已编译的 Java 模块。如果您不知道这一点,为什么选择尝试回答有关 Jython 的问题?
  • @mikerodent 这是对“集成”的非常狭隘的定义!但现在我们在争论语义,反正这无关紧要。我保留我的意见 =)
【解决方案2】:

一般来说,决定不应该是速度——无论如何,Python 类都将根据 Java 类实现,即使它们没有继承自 Java 类。因此,速度应该大致相当,并且每个操作最多可以节省几个方法调用。

更大的问题是你打算在课堂上做什么。如果您将它与 Python API 一起使用,您将需要使用 Python 类型,或者类似它们的行为,以便 不必执行实现整个 Mapping 协议的工作(只有你的班级改变的位)。如果您使用 Java API,您肯定需要满足静态类型检查——这意味着您需要继承 Java 的类。

如果在您的情况下这不容易回答,请从 Python 开始,因为您(正确 ;-) 发现它们“更简单、更性感”。如果您的课程没有超出您的项目边界,那么如果速度真的成为问题,那么以后更改应该是微不足道的 - 那时,您可能还会考虑诸如“它是否有助于实现它”之类的问题完全在 Java 级别?”希望您已经认识到,现在考虑的优化还为时过早。

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 2019-05-25
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多