Jython簡單介紹

前言

Jython(原 JPython)敞咧,是一個用 Java 語言寫的 Python 解釋器。由于python語法簡潔,寫起來快遣钳,而且目前有很多現(xiàn)成的算法庫彤避,所以別的語言也想坐享其成傅物,Java也不例外,如果能直接調(diào)用這些庫琉预,那對Java的普及將更為有力董饰。

  • 需要注意的是目前Jython只支持python2.x,以下給出一個case案例。

python

Test.py

def wdd(a, b):
    return a + b

java

依賴

<dependency>
    <groupId>org.python</groupId>
    <artifactId>jython-standalone</artifactId>
    <version>2.7.0</version>
</dependency>

JpythonUtil.java

import org.python.core.Py;
import org.python.core.PyFunction;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;

public class JpythonUtil {

    public static String runPythonMethod(PythonInterpreter interpreter, String handlerFunc, String fieldVal) {
        PyFunction func = (PyFunction)interpreter.get(handlerFunc, PyFunction.class);
        PyObject pyObject = func.__call__(Py.java2py(fieldVal));
        if (pyObject==null) {
            return null;
        } else if (pyObject.toString().equals("null")) {
            return null;
        } else if (pyObject.toString().equals("None")) {
            return null;
        }else {
            return pyObject.toString();
        }
    }

    public static String runPythonMethod(PythonInterpreter interpreter, String handlerFunc, Integer param1, Integer param2) {
        PyFunction func = (PyFunction)interpreter.get(handlerFunc, PyFunction.class);
        PyObject pyObject = func.__call__(Py.java2py(param1), Py.java2py(param2));
        if (pyObject==null) {
            return null;
        } else if (pyObject.toString().equals("null")) {
            return null;
        } else if (pyObject.toString().equals("None")) {
            return null;
        }else {
            return pyObject.toString();
        }
    }
    
    public static PythonInterpreter initPythonEnv(String pyProjectDir, String pyDependDir, String pyFile) {
        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.exec("import sys");
        interpreter.exec("sys.path.append(\"" + pyProjectDir + "\")");
        interpreter.exec("sys.path.append(\"" + pyDependDir + "\")");
        interpreter.execfile(pyFile);
        return interpreter;
    }

    public static void closePythonEnv(PythonInterpreter interpreter) {
        interpreter.cleanup();
        interpreter.close();
    }

    public static void main(String[] args) {
        String pyProjectDir = "/Users/dengpengfei/PycharmProjects/PySpark";
        String pyDependDir = "/Users/dengpengfei/PycharmProjects/Venv2.7/lib/python2.7/site-packages";
        String pyFile = "/Users/dengpengfei/PycharmProjects/PySpark/Test.py";
        PythonInterpreter interpreter = initPythonEnv(pyProjectDir, pyDependDir, pyFile);

        String line = runPythonMethod(interpreter, "wdd", 1, 1);
        System.out.println(line);
    }
}

結(jié)

目前這種java調(diào)用python的可行性是沒問題的卒暂,但是隨著python3.x的廣泛使用啄栓,Jython的迭代還需加快呀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末也祠,一起剝皮案震驚了整個濱河市昙楚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诈嘿,老刑警劉巖堪旧,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奖亚,居然都是意外死亡淳梦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門昔字,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爆袍,“玉大人,你說我怎么就攤上這事作郭◇χ妫” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵所坯,是天一觀的道長谆扎。 經(jīng)常有香客問我,道長芹助,這世上最難降的妖魔是什么堂湖? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮状土,結(jié)果婚禮上无蜂,老公的妹妹穿的比我還像新娘。我一直安慰自己蒙谓,他們只是感情好斥季,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著累驮,像睡著了一般酣倾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谤专,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天躁锡,我揣著相機與錄音,去河邊找鬼置侍。 笑死映之,一個胖子當著我的面吹牛拦焚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杠输,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼赎败,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蠢甲?” 一聲冷哼從身側(cè)響起螟够,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峡钓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體若河,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡能岩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了萧福。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拉鹃。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鲫忍,靈堂內(nèi)的尸體忽然破棺而出膏燕,到底是詐尸還是另有隱情,我是刑警寧澤悟民,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布坝辫,位于F島的核電站,受9級特大地震影響射亏,放射性物質(zhì)發(fā)生泄漏近忙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一智润、第九天 我趴在偏房一處隱蔽的房頂上張望及舍。 院中可真熱鬧,春花似錦窟绷、人聲如沸锯玛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攘残。三九已至,卻和暖如春为狸,著一層夾襖步出監(jiān)牢的瞬間肯腕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工钥平, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留实撒,地道東北人姊途。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像知态,于是被迫代替她去往敵國和親捷兰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容