⑴ java調用python,有第三方包gensim,怎麼調用呢,是報錯。求教....
Jython(原JPython),是一個用Java語言寫的Python解釋器。
在沒有第三方模塊的情況下,通常選擇利用Jython來調用Python代碼,
它是一個開源的JAR包,你可以到官網下載
一個HelloPython程序
importorg.python.util.PythonInterpreter;
publicclassHelloPython{
publicstaticvoidmain(String[]args){
PythonInterpreterinterpreter=newPythonInterpreter();
interpreter.exec("print('hello')");
}
}
什麼是PythonInterpreter?它的中文意思即是「Python解釋器」。我們知道Python程序都是通過解釋器來執行的,我們在Java中創建一個「解釋器」對象,模擬Python解釋器的行為,通過exec("Python語句")直接在JVM中執行Python代碼,上面代碼的輸出結果為:hello
在Jvm中執行Python腳本
interpreter.execfile("D:/labs/mytest/hello.py");
如上,將exec改為execfile就可以了。需要注意的是,這個.py文件不能含有第三方模塊,因為這個「Python腳本」最終還是在JVM環境下執行的,如果有第三方模塊將會報錯:javaImportError:Nomolenamedxxx
僅在Java中調用Python編寫的函數
先完成一個hello.py代碼:
defhello():
return'Hello'
在Java代碼中調用這個函數:
importorg.python.core.PyFunction;
importorg.python.core.PyObject;
importorg.python.util.PythonInterpreter;
publicclassHelloPython{
publicstaticvoidmain(String[]args){
PythonInterpreterinterpreter=newPythonInterpreter();
interpreter.execfile("D:/labs/hello.py");
PyFunctionpyFunction=interpreter.get("hello",PyFunction.class);//第一個參數為期望獲得的函數(變數)的名字,第二個參數為期望返回的對象類型
PyObjectpyObject=pyFunction.__call__();//調用函數
System.out.println(pyObject);
}
}
上面的代碼執行結果為:Hello
即便只是調用一個函數,也必須先載入這個.py文件,之後再通過Jython包中所定義的類獲取、調用這個函數。
如果函數需要參數,在Java中必須先將參數轉化為對應的「Python類型」,例如:
__call__(newPyInteger(a),newPyInteger(b))
a,b的類型為Java中的int型,還有諸如:PyString(Stringstring)、PyList(Iterator<PyObject>iter)等。
詳細可以參考官方的api文檔。
包含第三方模塊的情況:一個手寫識別程序
這是我和舍友合作寫的一個小程序,完整代碼在這里:
importjava.io.*;
classPyCaller{
privatestaticfinalStringDATA_SWAP="temp.txt";
privatestaticfinalStringPY_URL=System.getProperty("user.dir")+"\test.py";
(Stringpath){
PrintWriterpw=null;
try{
pw=newPrintWriter(newFileWriter(newFile(DATA_SWAP)));
}catch(IOExceptione){
e.printStackTrace();
}
pw.print(path);
pw.close();
}
publicstaticStringreadAnswer(){
BufferedReaderbr;
Stringanswer=null;
try{
br=newBufferedReader(newFileReader(newFile(DATA_SWAP)));
answer=br.readLine();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returnanswer;
}
publicstaticvoidexecPy(){
Processproc=null;
try{
proc=Runtime.getRuntime().exec("python"+PY_URL);
proc.waitFor();
}catch(IOExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
//測試碼
publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{
writeImagePath("D:\labs\mytest\test.jpg");
execPy();
System.out.println(readAnswer());
}
}
實際上就是通過Java執行一個命令行指令。
⑵ Python3 寫了一個簡單的模擬計算器 總是報錯 有知道的大神 幫忙解答下 非常感謝
#要return出去,你那下面調用後,但是值沒有返回
defvalidInput(info):
vchoice=raw_input(info)
ifvchoice=='exit':
sys.exit(0)
elifnotvchoice:
print('非法輸入')
returnvalidInput(info)
elifnotvchoice.isdigit():
print('請輸入數字')
returnvalidInput(info)
elifvchoiceisNone:
print('vchoiceisNone')
returnvalidInput(info)
else:
returnvchoice
⑶ 是真的嗎python模擬
是真的。模擬是用於Python測試的庫它是真的,可以在模擬的環境進行測試。它允許用模擬對象替換被測系統的各個部分,並聲明它們的使用方式。
⑷ python實現隨機漫步
1、隨機漫步
隨機漫步:每次行走都完全是隨機的,沒有明確的方向,結果是由一系列隨機決策決定的。可以認為是:螞蟻在暈頭轉向的情況下,每次都沿隨機的方向前行所經過的路徑。
1.1 創建RandomWalk()類
1.2 選擇方向
1.3 繪制隨機漫步圖
輸出:
1.4 模擬多次隨機漫步
1.5 給點著色
輸出:
1.6 重新繪制起點和終點
輸出:
1.7 隱藏坐標軸
輸出:
1.8 增加點數
輸出:
1.9 調整尺寸以適應屏幕
輸出:
⑸ 為什麼有人說 Python 的多線程是雞肋
因為 Python 中臭名昭著的 GIL。
那麼 GIL 是什麼?為什麼會有 GIL?多線程真的是雞肋嗎? GIL 可以去掉嗎?帶著這些問題,我們一起往下看,同時需要你有一點點耐心。
多線程是不是雞肋,我們先做個實驗,實驗非常簡單,就是將數字 「1億」 遞減,減到 0 程序就終止,這個任務如果我們使用單線程來執行,完成時間會是多少?使用多線程又會是多少?show me the code
那麼把 GIL 去掉可行嗎?
還真有人這么干多,但是結果令人失望,在1999年Greg Stein 和Mark Hammond 兩位哥們就創建了一個去掉 GIL 的 Python 分支,在所有可變數據結構上把 GIL 替換為更為細粒度的鎖。然而,做過了基準測試之後,去掉GIL的 Python 在單線程條件下執行效率將近慢了2倍。
Python之父表示:基於以上的考慮,去掉GIL沒有太大的價值而不必花太多精力。
⑹ Python模擬隨機遊走圖形效果示例
Python模擬隨機遊走圖形效果示例
本文實例講述了Python模擬隨機遊走圖形效果。分享給大家供大家參考,具體如下:
在python中,可以利用數組操作來模擬隨機遊走。
下面是一個單一的200步隨機遊走的例子,從0開始,步長為1和-1,且以相等的概率出現。純Python方式實現,使用了內建的 random 模塊:
# 隨機遊走importmatplotlib.pyplot as pltimportrandomposition=0walk=[position]steps=200foriinrange(steps): step=1ifrandom.randint(0,1)else-1 position+=step walk.append(position)fig=plt.figure()plt.title("www.jb51.net")ax=fig.add_subplot(111)ax.plot(walk)plt.show()
第二種方式:簡單的把隨機步長累積起來並且可以可以使用一個數組表達式來計算。因此,我用 np.random 模塊去200次硬幣翻轉,設置它們為1和-1,並計算累計和:
# 隨機遊走importmatplotlib.pyplot as pltimportnumpy as npnsteps=200draws=np.random.randint(0,2, size=nsteps)steps=np.where(draws >0,1,-1)walk=steps.cumsum()fig=plt.figure()plt.title("www.jb51.net")ax=fig.add_subplot(111)ax.plot(walk)plt.show()
一次模擬多個隨機遊走
# 隨機遊走importmatplotlib.pyplot as pltimportnumpy as npnwalks=5nsteps=200draws=np.random.randint(0,2, size=(nwalks, nsteps))# 0 or 1steps=np.where(draws >0,1,-1)walks=steps.cumsum(1)fig=plt.figure()plt.title("www.jb51.net")ax=fig.add_subplot(111)foriinrange(nwalks): ax.plot(walks[i])plt.show()
當然,還可以大膽的試驗其它的分布的步長,而不是相等大小的硬幣翻轉。你只需要使用一個不同的隨機數生成函數,如 normal 來產生相同均值和標准偏差的正態分布:steps=np.random.normal(loc=0, scale=0.25, size=(nwalks, nsteps))
⑺ python怎麼改變微信的步數
這個改不了,這就是微信這個軟體實際統計的步數,不允許用戶自行修改。
⑻ 分享!5個好用的Python工具
1、 IDLE
IDLE直譯過來就是集成開發與學習環境的意思,一般安裝 Python 時也會默認安裝 IDLE。每個語言都可以有自己的IDLE。它讓Python的入門變得簡單,對於沒什麼基礎的人寫就對了。它的主要功能包括Python shell 窗口(互動式解釋器)、跨平台(Windows、Linux、UNIX、Mac OS X)、智能縮進、代碼著色、自動提示、可以實現斷點提示、單步執行等調試功能的基本集成調試器。
2、 Scikit-learn
scikit-learn是一個建立在Scipy基礎上的用於機器學習的Python模塊。其中scikit-learn是最有名的,是開源的,任何人都可以免費地使用這個庫或者進行二次開發。它是一個非常強大的工具,能為庫的開發提供高水平的支持和嚴格的管理。它也得到了很多第三方工具的支持,有豐富的功能適用於各種用例。
3、Theano
Theano是一個較老牌和穩定的機器學習python庫之一,雖然目前使用的人數有所下降。但它畢竟是一個祖師級的存在,一定有它的優點所在。Theano基於Python擅長處理多維數組,屬於比較底層的框架,theano起初也是為了深度學習中大規模人工神經網路演算法的運算所設計,我們可利用符號化式語言定義想要的結果,支持GPU加速,非常適合深度學習Python。
4、Selenium
Selenium 是自動化的最佳工具之一。它屬於 Python 測試的自動化。它在 Web 應用程序中用於自動化框架。支持多款主流瀏覽器,提供了功能豐富的API介面,常被用作爬蟲工具。使用它可以用許多編程語言編寫測試腳本,包括Java、C#、python、ruby等。還可以集成 Junit 和 TestNG 等鈾工具來管理測試用例並生成報告。
5、Skulpt
Skulpt 是一個用 Javascript 實現的在線 Python 執行環境,完全依靠瀏覽器端模擬實現Python運行的工具。不需要任何預處理、插件或伺服器端支持,只需編寫python並重新載入即可。因為代碼完全是在瀏覽器中運行的,所以不用擔心伺服器崩潰的問題。
關於分享!5個好用的Python工具,環球青藤小編就和大家分享到這里了,學習是永無止境的,學習一項技能更是受益終身,所以,只要肯努力學,什麼時候開始都不晚。如果您還想繼續了解關於python編程的學習方法及素材等內容,可以點擊本站其他文章學習。
⑼ 如何用python的蒙特卡洛模擬生成新的數據
生成1~10的隨機數1000個:
import random
fp = open("test", 'w');
for i in range(1, 1000):
a = random.randint(1,10)
fp.write(str(a)+"\n");
fp.close();
注意:寫入文件的不會在最後寫入,而是重新寫文件。
⑽ Python一般可以用來干什麼呢
Python實際上是一種編程語言,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智慧,Web開發等。
1989年聖誕節,阿姆斯特丹,為了度過無聊的聖誕節,年輕人Guido決定開發一種新的編程語言。 Python(Boa Constrictor)的名字是因為他是Monty Python喜劇小組的粉絲。你看,技術是如此隨意...