兩個方法:
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了衡東免費(fèi)建站歡迎大家使用!
1.Python中靜態(tài)方法的作用就是保證方法里面所使用的屬性和值都是靜態(tài)不變的,使用靜態(tài)方法一般都不會定義參數(shù),因?yàn)殪o態(tài)方法只能夠使用靜態(tài)屬性。python內(nèi)定義靜態(tài)方法的方式為在定義函數(shù)的代碼前加上一個@staticmethod這樣的標(biāo)識符。
2.一般的類方法在定義之后需要實(shí)例化這個類才能夠通過類對象點(diǎn)方法的形式去調(diào)用它,但是靜態(tài)方法可以直接通過類名去調(diào)用。因?yàn)闉殪o態(tài)方法就相當(dāng)于是一個暴露在外部的自定義函數(shù)一樣,只需要使用類名找到它就可以使用了。同時靜態(tài)方法也能夠去用實(shí)例化之后的類對象對調(diào)用。
1、函數(shù)定義
①使用def關(guān)鍵字定義函數(shù)
②
def 函數(shù)名(參數(shù)1.參數(shù)2.參數(shù)3...):
"""文檔字符串,docstring,用來說明函數(shù)的作用"""
#函數(shù)體
return 表達(dá)式
注釋的作用:說明函數(shù)是做什么的,函數(shù)有什么功能。
③遇到冒號要縮進(jìn),冒號后面所有的縮進(jìn)的代碼塊構(gòu)成了函數(shù)體,描述了函數(shù)是做什么的,即函數(shù)的功能是什么。Python函數(shù)的本質(zhì)與數(shù)學(xué)中的函數(shù)的本質(zhì)是一致的。
2、函數(shù)調(diào)用
①函數(shù)必須先定義,才能調(diào)用,否則會報(bào)錯。
②無參數(shù)時函數(shù)的調(diào)用:函數(shù)名(),有參數(shù)時函數(shù)的調(diào)用:函數(shù)名(參數(shù)1.參數(shù)2.……)
③不要在定義函數(shù)的時候在函數(shù)體里面調(diào)用本身,否則會出不來,陷入循環(huán)調(diào)用。
④函數(shù)需要調(diào)用函數(shù)體才會被執(zhí)行,單純的只是定義函數(shù)是不會被執(zhí)行的。
⑤Debug工具中Step into進(jìn)入到調(diào)用的函數(shù)里,Step Into My Code進(jìn)入到調(diào)用的模塊里函數(shù)。
很多朋友都想知道java怎么調(diào)python?下面就一起來了解一下吧~
java調(diào)python主要有兩種方法:1.使用Runtime.getRuntime()執(zhí)行腳本文件;2. 將python腳本寫成進(jìn)程為java提供服務(wù),下面是具體的方法介紹:
第一種:使用Runtime.getRuntime()執(zhí)行腳本文件
先建立python腳本文件 demo.py
import?numpy?as?np a?=?np.arange(12).reshape(3,4)print(a)
java調(diào)用python程序并輸出該結(jié)果
import?java.io.BufferedReader;import?java.io.IOException;import?java.io.InputStreamReader;public?class?Demo?{ ????public?static?void?main(String[]?args)?{ ????????//?TODO?Auto-generated?method?stub ????????Process?proc; ????????try?{ ????????????proc?=?Runtime.getRuntime().exec("python?D:\\demo.py");//?執(zhí)行py文件 ????????????//用輸入輸出流來截取結(jié)果 ????????????BufferedReader?in?=?new?BufferedReader(new?InputStreamReader(proc.getInputStream())); ????????????String?line?=?null; ????????????while?((line?=?in.readLine())?!=?null)?{ ????????????????System.out.println(line); ????????????} ????????????in.close(); ????????????proc.waitFor(); ????????}?catch?(IOException?e)?{ ????????????e.printStackTrace(); ????????}?catch?(InterruptedException?e)?{ ????????????e.printStackTrace(); ????????}? ????}}
如若向python程序中函數(shù)傳遞參數(shù)并執(zhí)行出結(jié)果,下面就舉一例來說明一下。
同樣建立python腳本文件demo2.py
import?sys def?func(a,b): ????return?(a+b)if?__name__?==?'__main__': ????a?=?[] ????for?i?in?range(1,?len(sys.argv)): ????????a.append((int(sys.argv[i]))) ????print(func(a[0],a[1]))
其中sys.argv用于獲取參數(shù)url1,url2等。而sys.argv[0]代表python程序名,所以列表從1開始讀取參數(shù)。
以上代碼實(shí)現(xiàn)一個兩個數(shù)做加法的程序,下面看看在java中怎么傳遞函數(shù)參數(shù),代碼如下:
int?a?=?18;int?b?=?23;try?{ ????String[]?args?=?new?String[]?{?"python",?"D:\\demo2.py",?String.valueOf(a),?String.valueOf(b)?}; ????Process?proc?=?Runtime.getRuntime().exec(args);//?執(zhí)行py文件 ????BufferedReader?in?=?new?BufferedReader(new?InputStreamReader(proc.getInputStream())); ????String?line?=?null; ????while?((line?=?in.readLine())?!=?null)?{ ????????System.out.println(line); ????} ????in.close(); ????proc.waitFor();}?catch?(IOException?e)?{ ????e.printStackTrace();}?catch?(InterruptedException?e)?{ ????e.printStackTrace();}
其中args是String[] { “python”,path,url1,url2 }; ,path是python程序所在的路徑,url1是參數(shù)1,url2是參數(shù)2,以此類推。
2. 將python腳本寫成進(jìn)程為java提供服務(wù)
python腳本文件如下:
import?socketimport?sysimport?threadingimport?numpy?as?npfrom?PIL?import?Imagedef?main(): ????#?創(chuàng)建服務(wù)器套接字 ????serversocket?=?socket.socket(socket.AF_INET,socket.SOCK_STREAM) ????#?獲取本地主機(jī)名稱 ????host?=?socket.gethostname() ????#?設(shè)置一個端口 ????port?=?12345 ????#?將套接字與本地主機(jī)和端口綁定 ????serversocket.bind((host,port)) ????#?設(shè)置監(jiān)聽最大連接數(shù) ????serversocket.listen(5) ????#?獲取本地服務(wù)器的連接信息 ????myaddr?=?serversocket.getsockname() ????print("服務(wù)器地址:%s"%str(myaddr)) ????#?循環(huán)等待接受客戶端信息 ????while?True: ????????#?獲取一個客戶端連接 ????????clientsocket,addr?=?serversocket.accept() ????????print("連接地址:%s"?%?str(addr)) ????????try: ????????????t?=?ServerThreading(clientsocket)#為每一個請求開啟一個處理線程 ????????????t.start() ????????????pass ????????except?Exception?as?identifier: ????????????print(identifier) ????????????pass ????????pass ????serversocket.close() ????passclass?ServerThreading(threading.Thread): ????#?words?=?text2vec.load_lexicon() ????def?__init__(self,clientsocket,recvsize=1024*1024,encoding="utf-8"): ????????threading.Thread.__init__(self) ????????self._socket?=?clientsocket ????????self._recvsize?=?recvsize ????????self._encoding?=?encoding????????pass ????def?run(self): ????????print("開啟線程.....") ????????try: ????????????#接受數(shù)據(jù) ????????????msg?=?'' ????????????while?True: ????????????????#?讀取recvsize個字節(jié) ????????????????rec?=?self._socket.recv(self._recvsize) ????????????????#?解碼 ????????????????msg?+=?rec.decode(self._encoding) ????????????????#?文本接受是否完畢,因?yàn)閜ython?socket不能自己判斷接收數(shù)據(jù)是否完畢, ????????????????#?所以需要自定義協(xié)議標(biāo)志數(shù)據(jù)接受完畢 ????????????????if?msg.strip().endswith('over'): ????????????????????msg=msg[:-4] ????????????????????break ??????????? ????????????sendmsg?=?Image.open(msg) ????????????#?發(fā)送數(shù)據(jù) ????????????self._socket.send(("%s"%sendmsg).encode(self._encoding)) ????????????pass ????????except?Exception?as?identifier: ????????????self._socket.send("500".encode(self._encoding)) ????????????print(identifier) ????????????pass ????????finally: ????????????self._socket.close()? ????????print("任務(wù)結(jié)束.....") ???????? ????????pass ????def?__del__(self): ????????passif?__name__?==?"__main__": ????main()
在java代碼中訪問python進(jìn)程的代碼: package?hello;import?java.lang.System;import?java.io.BufferedReader;import?java.io.IOException;import?java.io.InputStreamReader;import?java.net.InetAddress;import?java.net.Socket;import?java.io.OutputStream;import?java.io.PrintStream;import?java.io.InputStream;public?class?hello?{ ????public?static?void?main(String[]?args){ ????????//System.out.println("Hello?World!"); ????????//?TODO?Auto-generated?method?stub ????????try?{ ????????????InetAddress?addr?=?InetAddress.getLocalHost(); ????????????String?host=addr.getHostName(); ????????????//String?ip=addr.getHostAddress().toString();?//獲取本機(jī)ip ????????????//log.info("調(diào)用遠(yuǎn)程接口:host="+ip+",port="+12345); ????????????//?初始化套接字,設(shè)置訪問服務(wù)的主機(jī)和進(jìn)程端口號,HOST是訪問python進(jìn)程的主機(jī)名稱,可以是IP地址或者域名,PORT是python進(jìn)程綁定的端口號 ????????????Socket?socket?=?new?Socket(host,12345); ????????????//?獲取輸出流對象 ????????????OutputStream?os?=?socket.getOutputStream(); ????????????PrintStream?out?=?new?PrintStream(os); ????????????//?發(fā)送內(nèi)容 ????????????out.print(?"F:\\xxx\\0000.jpg"); ????????????//?告訴服務(wù)進(jìn)程,內(nèi)容發(fā)送完畢,可以開始處理 ????????????out.print("over"); ????????????//?獲取服務(wù)進(jìn)程的輸入流 ????????????InputStream?is?=?socket.getInputStream(); ????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(is,"utf-8")); ????????????String?tmp?=?null; ????????????StringBuilder?sb?=?new?StringBuilder(); ????????????//?讀取內(nèi)容 ????????????while((tmp=br.readLine())!=null) ????????????????sb.append(tmp).append('\n'); ????????????System.out.print(sb); ????????????//?解析結(jié)果 ????????????//JSONArray?res?=?JSON.parseArray(sb.toString()); ????????}?catch?(IOException?e)?{ ????????????e.printStackTrace(); ????????}finally?{ ????????????try?{if(socket!=null)?socket.close();}?catch?(IOException?e)?{} ????????????System.out.print("遠(yuǎn)程接口調(diào)用結(jié)束."); ????????} ??????}}
如果你想要在 Python 中忽略某個函數(shù),可以使用 pass 語句。這個語句不會做任何事情,只是告訴解釋器這里什么也不用做,繼續(xù)執(zhí)行下一條語句。
例如,你可以這樣寫:
def my_function():
pass
如果你想要把這個函數(shù)改回來,只需要在 pass 語句之后添加你想要執(zhí)行的代碼即可。
例如:
def my_function():
print("Hello, World!")
這樣,當(dāng)你調(diào)用 my_function() 時,它會打印出 "Hello, World!"。
希望這對你有幫助!