zoukankan      html  css  js  c++  java
  • Jython可以做什么

    在写这篇随笔之前,搜索了一下“Jython + 博客园”,发现介绍Jython的文章还是比较少,仅有的那几篇大部分还是介绍怎么配置Jython。

    http://www.cnblogs.com/sesamfox/articles/2313040.html,这篇文章倒是介绍得比较详细,不过说的是怎么用Jython编程的具体细节问题,我想,一般人在新学习一门语言之前不是马上去看这种语言的语法细节,而是会先去了解这种语言的特点,什么是其他语言做不到的而这种语言可以轻松做到的,也就是说相较于其他语言有什么特点。了解了这些特点之后,就相当于在看具体的细节之前对这种语言有了一个宏观的把握,虽然对于其描述的特点一开始可能不能透彻地理解,但是这些可以在具体的学习过程中一点点补充。

    这篇随笔会在结合少量代码的基础上着重回答一个问题——Jython可以做什么?

    一、Jython的安装

    本文的主要目的是介绍Jython可以做什么,至于Jython怎么安装在这里只是提一下,http://www.jython.org上有安装包的下载和安装过程的介绍。

    PS:不同的OS,安装Jython的方法不一样,需要配置的环境变量也不一样,根据自己的系统选择合适的安装包,对应的教程。

    二、Jython可以做什么

    1.Jython是使用java实现的Python,很显然,Python能做的,Jython也能做。

    1 import os
    2 
    3 print("Hello, Jython!!!")
    4 print(os.getcwd())

    在Jython的解释器下运行上面的代码,输出结果如下:

    Hello, Jython!!!
    C:\Users\Administrator\workspace\stackoverflow\GX1164

    os是Python实现的一个模块,getcwd函数返回当前的工作目录。

    可以看到,Jython的语法和CPython的语法完全一致。其中,CPython是Python的C语言实现,大部分情况下我们说Python,其实说的就是CPython。

    2.Jython可以调用java语言编写的类

    举个例子,我用java语言写了一个叫Decimal的类,代码如下:

    1 package Overflow;
    2 
    3 import java.math.*;
    4 
    5 public class Decimal {
    6     public void testLog(){
    7         System.out.println(Math.log(2));
    8     }
    9 }

    使用jar命令将这个类的字节码文件打包之后,我们就可以在Jython程序中使用这个自己定义的类,下面的测试程序显示了使用方法

     1 import sys
     2 sys.path.append("C:/Users/Administrator/workspace/Stack/bin/Overflow.jar")
     3 
     4 import Overflow
     5 from java.util import Date
     6 
     7 d = Overflow.Decimal()
     8 d.testLog()
     9 dd = Date()
    10 print(dd)

    测试程序的运行结果如下:

    0.6931471805599453
    Sun Apr 27 10:16:00 CST 2014

    这里稍微解释一下测试程序,sys是Python的另外一个模块,sys.path.append(dir)的作用是将dir这个目录加入到环境变量CLASSPATH中,对java稍微了解的人都知道,CLASSPATH这个环境变量的作用是供系统寻找类定义用的,也就是说如果你不加上这条语句,在执行import Overflow这条语句的时候,系统找不到Overflow是在哪定义的,所以会报错。

    导入之后,就可以像使用Python自己定义的类一样使用自己定义的类了,语法都是一样的,在本例中,我就使用了Decimal中的testLog函数,0.69314...是log(2)以自然对数为底时的值

    细心的读者可能会注意到,在import Overflow下面还有一行from java.util import Date这样一行语句,其实这行语句的作用和下面这行语句的作用是一致的

    1 import java.util.Date;

    只是上面这种写法是我们在写java程序的时候用到的。

    从输出结果我们可以看到,在Jython中不仅可以使用自己定义的类,还可以使用java自带的丰富类库。

    PS:在安装Jython之前一定要先安装好JVM,因为Jython是基于JVM的。

    3.在java程序中使用Python的系统调用

    下面是一个具体的例子

     1 package Overflow;
     2 
     3 import org.python.util.PythonInterpreter;  
     4 import org.python.core.*;  
     5 public class Jython {  
     6     public static void main(String[] args) {  
     7        
     8         PythonInterpreter interp =  
     9         new PythonInterpreter();  
    10         System.out.println("Hello, brave new world");  
    11         interp.exec("import sys");  
    12         interp.exec("print sys");  
    13         interp.set("a", new PyInteger(42));  
    14         interp.exec("print a");  
    15         interp.exec("x = 2+2");  
    16         PyObject x = interp.get("x");  
    17         System.out.println("x: "+x);  
    18         System.out.println("Goodbye, cruel world");      
    19     }  
    20 } 

    请注意,这里转到了java,使用的也是java的语法,但是我们可以通过PythonInterpreter这个对象来完成对Python系统函数的调用。当然,为了使用这个对象,你需要把Jython安装目录下的Jyhton.jar加入你的java工程中。

    这个例子完全借鉴于下面这篇博客

    http://blog.csdn.net/zhongweijian/article/details/4742549

    三、总结:

    在《The Unix Philosophy》这本书中提到两点:“舍高效率而取可移植性”和“充分利用软件的杠杆效应”。

    “舍高效率而取可移植性”相信大家都懂,其实“充分利用软件的杠杆效应”说的是类似的道理,就是说我们在编程的时候没必要所有的东西都自己实现,别人已经实现过的优秀代码,我们完全可以借鉴过来,这样不仅可以节省大量的时间,并且可以集中精力处理自己该处理的那部分代码,更有可能生产出高质量的代码。说到底,这两条无非是说了一个代码复用的问题。

    Jython出现很好地体现了代码复用这一思想,回顾上面的内容我们可以总结出以下两点。

    1.在使用Python编程时,不管是你自己实现的,还是别人实现的,还是java类库实现的,只要是.class文件,我们就可以在Python程序中直接使用,而不必再改写一遍。

    2.在使用java编程时,我们可以使用Python实现的丰富类库。

    综合以上两点,我们基本上可以得出一个结论:java和Python可以相互调用,这是多么强大的一个特性!

  • 相关阅读:
    第十三周课程总结
    第十二周课程总结
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周学习总结&java实验报告四
    2019秋Java学期课程总结
    2019Java第十四周课程总结
  • 原文地址:https://www.cnblogs.com/moqiguzhu/p/3693778.html
Copyright © 2011-2022 走看看