【问题标题】:Why use Jython when you could just use Java? [closed]既然可以只使用 Java,为什么还要使用 Jython? [关闭]
【发布时间】:2010-09-10 22:45:10
【问题描述】:

标准答案是当你只需要写几行代码时它很有用......

我在 Eclipse 中集成了这两种语言。因为 Eclipse 处理编译、解释、运行等,两者“运行”完全一样。

两者的 Eclipse IDE 类似 - 即时“编译”、智能感知等。两者都允许使用 Debug 透视图。

如果我想测试几行 Java,我不必创建一个全新的 Java 项目 - 我只需使用 Eclipse 中的 Scrapbook 功能,它允许我“执行 Java 表达式,而无需必须创建一个新的 Java 程序。这是一种快速测试现有类或评估代码 sn-p 的巧妙方法"

Jython 允许使用 Java 库 - 但是(根据定义)Java 也是如此!

那么 Jython 还提供哪些其他好处?

【问题讨论】:

  • 有趣的是,我正要问“既然可以使用 Jython,为什么还要使用 Java?”尝试从 Jython 做 Swing,看看它是多么令人愉快:btn = JButton("Click me", actionPerformed = SomeFunction)。比编写整个类来处理按钮点击要容易一点,不是吗?
  • 太糟糕了,这个问题已经结束了;因为有一个很好的观点没有出现在任何答案中(除非我忽略了):使用 jython,我可以在正在运行的 jvm 的上下文中执行新代码。你不能用 java 做到这一点。
  • 我不明白为什么这个任务被关闭了。
  • 关闭为“..这个问题可能会引发辩论、争论、投票或扩展讨论..”。是的,技术/编程是人们应该始终遵循理论/设定标准的领域;并应避免讨论、投票,甚至可能会思考。完全有道理!

标签: java eclipse jython


【解决方案1】:

一个简单的例子(来自http://coreygoldberg.blogspot.com/2008/09/python-vs-java-http-get-request.html):

你有一个 Java 后端,你需要执行 HTTP GET 请求。

本机:

import java.net.*;
import java.io.*;

public class JGet {
    public static void main (String[] args) throws IOException {
        try {
            URL url = new URL("http://www.google.com");

            BufferedReader in = 
                new BufferedReader(new InputStreamReader(url.openStream()));
            String str;

            while ((str = in.readLine()) != null) {
                System.out.println(str);
            }

            in.close();
        } 
        catch (MalformedURLException e) {} 
        catch (IOException e) {}
    }
}

在 Python 中:

import urllib
print urllib.urlopen('http://www.google.com').read()

Jython 允许您使用 java 的健壮性,并在需要时使用 Python 的清晰度。

还有什么?正如乔治所说...

【讨论】:

  • 没有什么能阻止 Java 拥有执行 UrlUtil.open("www.google.com").read() 的实用程序类。
  • 是的,您只需要自己编写代码。像其他一切一样。
  • Corey Goldberg 比较 Java 和 Python 的例子几乎可以在互联网上找到一个虚假的比较,上面的例子也好不了多少。 (此外,它暗示了一种值得商榷的健壮性/清晰性二分法。)上面的 Java 代码比 Python 代码(OO、缓冲读取、异常框架等)做得更多。使用 Jython 是有原因的,但人为的简洁示例并不是很有说服力。
  • 首先,java 代码并没有做更多的事情。 Python 代码是完整的 OO 并且 open() 包装了一个执行流式传输的文件对象。另外,我在这里看不到任何有关框架的信息。所以是的,有异常处理,但你也可以在 Python 中完成。这里真正的麻烦是,Java 只是不允许你以任何更短的方式来做,即使功能更少。这不是对 Java 的攻击。我的意思是:您会使用 Jython,因为有时您想要更薄的东西。
  • 你的意思是我的意思:这就是为什么你会使用 Jython 而不仅仅是 Java。
【解决方案2】:

Python 语法(由 Jython 使用)对于许多程序员来说开发起来更加简洁和快捷。

此外,您可以在 Java 应用程序中使用现有的 Python 库。

【讨论】:

    【解决方案3】:

    类比:当您可以喝热自来水并咀嚼烤苦豆时,为什么还要喝咖啡。 :-)

    对于某些任务,Python 只是味道更好,工作更好,并且足够快(需要时间来酝酿?)。如果您的编程或部署环境专注于 JVM,则 Jython 允许您编写 Python 代码,但无需更改您的部署和运行时环境。

    【讨论】:

      【解决方案4】:

      我刚刚发现了 Jython,作为一名语言学家,我想我会说这有点像问“既然可以使用法语,为什么还要使用拉丁语”(忘记拉丁语先于法语这一事实,当然)。

      不同的人类语言实际上会让你以不同的方式思考。法语是一门很棒的语言,我在法国生活了很长时间并获得了学位。但是拉丁语惊人的力量和简洁让你的思维进入了一个不同的区域,例如,在这里可以交换词序以产生各种微妙的效果。

      我认为,从我对 Jython 的粗略了解(顺便说一句,这确实激发了我的热情),这将使我以不同的方式思考。一段时间以来,我一直对 Python/Jython 持怀疑态度,并且一直是 Java 泛型的忠实粉丝(讽刺的是,它减少了打字量,因此如果你愿意,可以“拉丁化”法语)。我不太了解像 Jython 这样的“动态类型”语言的全部含义,但我认为最好的办法是顺其自然,看看 Jython 对我的想法有什么影响!

      语言来来去去很有趣。另一个“拉丁语”可能被认为是具有无限递归语法的 Algol68。但是开发大规模递归代码的需求,以及阅读和思考代码的能力,还没有(还)让人感觉到。 Jython 似乎非常强大和优雅地适应了我们现在的情况,它具有 OO 库、Java swing 的强大功能,并且所有东西都封装在一个非常优雅的包中。也许有一天 Jython 也会采用无限递归语法?

      【讨论】:

        【解决方案5】:

        我使用 Jython 对 Java 代码进行交互式测试。这通常比编写 Java 测试应用程序甚至任何脚本语言要快得多。我可以玩弄这些方法,看看它是如何反应的。从那里我可以学到足够的知识去编写一些真正的代码或测试用例。

        【讨论】:

          【解决方案6】:

          除非您喜欢编写(或让您的 IDE 生成)数百行样板代码,否则使用 Python 不仅仅是“语法糖”。使用动态类型语言时,快速开发技术具有优势,但缺点是它会使您的 API 和集成变得复杂,因为您不再拥有同质的代码库。这也会影响维护,因为不是您团队中的每个人都像您一样喜欢 Python,而且使用它的效率也不高。这可能是个问题。

          【讨论】:

            【解决方案7】:

            某些语言的某些任务比其他语言更容易。如果我必须解析一些文件,我会立即选择 Python 而不是 Java。

            【讨论】:

            • 我需要读取一个原始文件,并解析出关键数据位。将 jython 嵌入到我的 java 应用程序的中间让我可以使用正则表达式和列表推导轻松地扫描文件,然后将我的发现返回到我的 java 代码。
            【解决方案8】:

            Python 具有函数式编程的一些特性,例如 lambda。 Java 没有这样的功能,如果有这样的支持,一些程序会更容易编写。因此,有时用 Python 编写代码并通过 Jython 将其集成以尝试用 Java 编写代码会更容易。

            【讨论】:

              【解决方案9】:

              Python 库 ;) 例如 BeautifulSoup - 一个接受错误标记的 HTML 解析器。 AFAIK 没有类似的纯 Java 库。

              【讨论】:

              • 你确定它可以在 Jython 下工作吗?
              • 你是对的。稳定版本相当于 Python 2.2。它可能太旧了……而且 Jython 2.5 仍处于 alpha 状态。在稳定版本可用后,它应该可以工作。
              【解决方案10】:

              无需编译。也许您希望获得比使用编译语言更快的东西,例如原型。

              ...您可以将 Jython 解释器嵌入到您的应用程序中。不错的功能,我不能说我用过,但还是很酷。

              【讨论】:

                【解决方案11】:

                Jython 还可以用作 Java 程序中的嵌入式脚本语言。您可能会发现在某些时候使用内置的扩展语言编写一些东西很有用。如果使用 Java Jython 是一种选择(Groovy 是另一种选择)。

                我主要使用 Jython 在 Java 系统上进行探索性编程。我可以导入应用程序的某些部分,并通过从交互式 Jython 会话调用调用​​来查看 API 以查看发生了什么。

                【讨论】:

                  【解决方案12】:

                  语法糖。

                  【讨论】:

                  • 是的。真正的程序员使用磁化针和稳定的手 (c) xkcd.com/378 。其他一切都是语法糖。
                  【解决方案13】:

                  在你的情况下,这没有多大意义。但这并不意味着它永远不会。例如,如果您正在开发一种允许最终用户创建扩展或插件的产品,那么可编写脚本可能会很好。

                  【讨论】:

                    【解决方案14】:

                    将现有代码移植到新环境可能是原因之一。你的一些业务逻辑和领域功能可能存在于 Python 中,而编写该代码的团队坚持使用 Python。但是部署和维护它的团队可能需要 J2EE 集群的可管理性以实现规模化。您可以将 Jython 中的逻辑封装在 EAR/WAR 中,然后部署组将看到另一个 J2EE 捆绑包像所有其他 J2EE 捆绑包一样进行管理。

                    即这是一种处理阻抗不匹配的方法。

                    【讨论】:

                      猜你喜欢
                      • 2015-05-20
                      • 2017-06-30
                      • 1970-01-01
                      • 2013-01-06
                      • 2018-02-21
                      • 2010-10-09
                      • 2020-12-30
                      • 2015-02-15
                      相关资源
                      最近更新 更多