我认识Python,但Jython是什么?
请详细说明!感谢。
答案 0 :(得分:26)
引用Wikipedia:
Jython,JPython的继任者,是用Java编写的Python编程语言的实现。
至于它可能有什么用途:
Jython程序可以无缝导入和使用任何Java类。除了一些标准模块,Jython程序使用Java类而不是Python模块。
Jython,IronPython和CPython的性能测量表明,对于某些拥有大型数据集的案例,Jython和IronPython都优于CPython。
答案 1 :(得分:9)
如果您了解Python并采用“pythonic”方式,那么Jython允许您将该原理带入JVM堆栈。如果你这样做,它不仅仅是添加脚本功能。
在我们的最新项目中,所有自定义和业务逻辑都是在Jython中构建的,同时我们仍然可以利用一些经过试验和测试的Java库,如Solr,Jasperreports,Quartz,Jetty,Velocity等等。
它确实被编译为字节码,但是,正在添加一个额外的层,但与使用ORM而不是直接的JDBC没有什么不同。
你所获得的生产力远远超过了表现中微不足道的损失。
在服务器端,Jython很少成为瓶颈。对于迷你桌面应用程序,可能存在问题,但很大程度上取决于您要执行的操作。
最新的JDK以及Jetty或Tomcat等容器非常成熟和稳定,在许多情况下,添加Python可以提供两全其美的优势。
答案 2 :(得分:6)
我什么时候需要Jython?
如果您想在Python中编程但需要(或希望)在Java虚拟机上运行结果,或者使用现有的Java组件。
有什么缺点。
Jython可能与Python不是100%兼容,但任何不兼容性都会被视为错误。如果您以后想要/需要在CPython上运行,则必须重写使用Java组件的任何代码。
我认为它很慢?
这一直取决于您的具体用例。在某些情况下,它实际上可能比CPython更快;当然这取决于你运行的特定JVM - 这些JVM一直在变得更好。
答案 3 :(得分:5)
另外两个原因:
答案 4 :(得分:4)
Jython是一个在JVM之上运行的Python实现。 从理论上讲,Jython有点慢,然后是CPython。
你可以在这里找到一些基准: http://www.smallshire.org.uk/sufficientlysmall/2009/05/22/ironpython-2-0-and-jython-2-5-performance-compared-to-python-2-5/
答案 5 :(得分:4)
我什么时候需要Jython?
例如,为代码添加一个很好的脚本语言。
有什么缺点?
主要缺点是Jython落后于官方CPython发行版。目前,您可以获得与Python 2.5.2兼容的Jython版本,而CPython是3.1。
也不支持一些深奥的模块。通常,您不会注意到和/或能够轻松找到Java替代品。
我认为它很慢?
相比什么?通常情况下,它要么足够快,要么它不是,你可以用大约1000行快得多的Java代替几行Python。
答案 6 :(得分:1)
我什么时候需要Jython?
您可以使用Jython为Websphere应用程序服务器编写管理脚本。这些脚本用于自动执行常见管理任务并在Websphere应用程序服务器中配置安全性。
WebSphere利用JMX API创建作为内部WebSphere对象的API公开的MBean。由于Jython脚本基于Java并且它们在JVM上运行,因此它们可以访问这些对象并可用于配置WebSphere。
此外,在Jython中编写代码并学习一门新语言很有趣。
答案 7 :(得分:1)
我什么时候需要Jython?
我需要Jython来测试JDBC驱动程序。我使用的一些应用程序使用ODBC,有些使用JDBC。使用Jython我可以从一个Python源测试这两种类型的驱动程序 (测试ODBC我使用JDBC-ODBC桥)。
答案 8 :(得分:0)
JVM做了一些不错的动态优化,但它可能没什么好兴奋的。 JRuby有时通过优化运行很多的代码路径在JVM(http://www.engineyard.com/blog/2009/j-is-for-jvm-why-the-j-in-jruby/)上运行得更快,但这是Ruby,而不是Python。
Java库是主要原因。很多公司都有大量的Java代码,可以用Python编写脚本。还有一些开源框架(Struts和Eclipse让人想起),您可以使用Jython编写脚本。
答案 9 :(得分:0)
要获得良好的速度性能或实现真正的多线程程序,最好直接从java(本机)调用python脚本。只需准备您的python脚本,然后让Java进行其余操作,以便同时调用python脚本。