java&python使用對比的淺析
本人寫了一段時間java了,最近半年在寫python,遂想將其使用中的共同點和異同點整理出來,方便自己和大家學習。
兩者的本質區別,請參考如下別人寫的帖子:
ofollow,noindex" target="_blank">https://blog.csdn.net/sinat_30603081/article/details/78489261?locationNum=1&fps=1
https://blog.csdn.net/qq_17635843/article/details/77880694
本人不是特別清楚,只大概知道java 是強型別語言,python是弱型別語言,java 的執行速度和效率高於python(主要是它只能運用於單核機器),原諒渣渣的我
使用比較:
- 基礎語法篇:
先個來一個hello world 鎮鎮樓:
public class HelloWorld {
public static void main(String []args) {
System.out.println("Hello World");
}
}
if __name__ == '__main__':
print("Hello World")
此處大家已經明顯感覺到了 java是通過花括號({ })和分號來區分程式碼的,而python通過程式碼縮排來保障這一點的,所以大家在寫python程式碼時一定得注意行縮排,要不然後期程式碼會報錯的,這點也是python異於別的語言的一個特點。
2.修飾符:
Java的: public , protected, private
Python的:雙下劃線“__” 表示私有
3.資料型別:
Java語言提供了八種基本型別。六種數字型別(四個整數型,兩個浮點型),一種字元型別,還有一種布林型。數字型別包括: byte , short , int , long,float,double ,
Python:Number(數字),String(字串),List(列表),Tuple(元組),Set(集合),Dictionary(字典) 這裡python語言比起java 有些特殊,如List ,Tuple,Set等在java為內建的集合類,而在python卻是一種資料型別,python的數字型別支援: int、float、bool、complex(複數)這四種類型,此處大家需要注意一些東東:python3 和 python2在int型別上有個區別,那就是python2 支援支援整形和長整型兩種數字型別,而python3 只有整形, 還有一個問題很重要很重要的 ,那就是python2 本身是沒有布林型別的,它用0表示False,用1表示True,到了python3,把True,和Fale作為了關鍵字,但是它們的值還是0和1,仍然可以進行加減。剩下的String 字串型別和java中的String 類相似,至於 List(列表),Tuple(元組),Set(集合),Dictionary(字典) 我會在後續的java 集合類內會做對比的。
4.運算子:
算數運算子:
Java 和python 支援基本的 + - * / 以及 % 運算,特殊的是java 還支援 自增 ++ 以及自減 – 運算,而python還支援一些冪運算 ** ,以及取整除運算 //,這些運算java只能通過呼叫內建大的一些方法和api才能達到對應的效果
比較運算子:
二者均支援:== != > < >= <= 這6個運算子
位運算子:
二者均支援:& | ^ ~ >> << 這6個運算子
邏輯運算子:
Java支援的邏輯運算子為: && || !
Python支援的邏輯運算子為:and or not
特有篇:
最後 python還支援成員運算子 :in 以及 not in這是java所沒有的 和身份成員運算子:is 和 is not
運算優先順序請看如下截圖(出自菜鳥教程):
Python篇:
Java篇:
5.迴圈篇:
Java篇:
支援如下三種迴圈用法:
- while 迴圈
- do…while 迴圈
- for 迴圈
其中 while的用法:
while( 布林表示式 ) { //迴圈內容 }
do……while 用法為:
do {
//程式碼語句
}while(布林表示式);
for 的用法:
for(初始化; 布林表示式; 更新) { //程式碼語句 }
python篇:
- while 迴圈
- for 迴圈
其中 while的用法:
while 判斷條件:
語句
for 的用法:
for 變數 in 序列:
語句
總結:在日常使用中for是使用最多的迴圈,此處java 和 python 中都有很多很經典的用法,大家需要很好的掌握,請自行學習別的帖子,此處我不做過多陳述。
條件控制:
Java與python都支援if……else…… 語句,還有同時支援 if...else if...else 語句,只不過 python的這個語句表示式是這樣的 if...elif...else ,邏輯判斷結構都是一樣的只是python的這個表示式較java 比較特殊罷了。
當然 java除了支援if……else 這樣類似的結構外還支援 switch …… case結構,此處我也不做過多陳述了
6.異常處理:
Java 篇:
try
{
// 程式程式碼
}catch(ExceptionName e1)
{
//Catch 塊
}
丟擲異常方法:
throw/ throws 異常名
Python篇:
try:
<語句>#執行別的程式碼
except <名字>:
<語句>#如果在try部份引發了'name'異常
except <名字>,<資料>:
<語句>#如果引發了'name'異常,獲得附加的資料
else:
<語句>#如果沒有異常發生
丟擲異常方法:raise [Exception [, args [, traceback]]]
此處java 與 python的捕獲異常方法類似,只不過一個捕獲異常使用 catch,一個使用except罷了。此處python更靈活點,多了個else語句。
7.面向物件:
類的宣告:
Java:
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
Python:
class Dog:
breed = ""
age = 0
color = ""
def barking () :
pass
def hungry () :
pass
def sleeping () :
pass
此處我為了找個對應的例子然後寫了個很挫的例子,就是為了讓大家可以更清晰python的舉例
構造方法:
Java的:
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 這個構造器僅有一個引數:name
}
}
Python的:
class Puppy:
def __init__(self,name):
pass
其中的 __init__ 就是python的構造方法
建立物件:
Java 篇:
public class Puppy{
public Puppy(String name){
//這個構造器僅有一個引數:name
System.out.println("小狗的名字是 : " + name );
}
public static void main(String []args){
// 下面的語句將建立一個Puppy物件
Puppy myPuppy = new Puppy( "tommy" );
}
}
Python 篇:
class Puppy:
def __init__(self,name):
print ("小狗的名字是 : %s" % name)
if __name__ == '__main__':
puppy = Puppy("tommy ")
許可權修飾符:
這個時候大家會問,java 有 public ,private 等許可權修飾符,python有嗎,我得鄭重說有呀,必須有呀,只不過python 跟java 類似假如不顯示宣告的話預設都是公共的,假如在屬性和方法面前加上”__”(此處是兩個下劃線) 時表示的就是私有屬性或者私有方法了。
方法&函式:
Java 中的方法對應python中叫函式,別問我為啥,我就看別的文件都這麼寫的,宣告方法:
Java 篇:
public /private/protected 返回型別 方法名(引數){
方法體
}
Python 篇:
def __ 或者此處啥都不寫 方法名(引數與):
方法體
基本上與java的類似就是多了個 def 罷了
繼承:
Java 篇:
class 父類 { }
class 子類 extends 父類 { }
python篇:
class 派生類 (父類)
這裡你會發現其實java 和 python就是省略了一個 extends ,此處我大概點撥一下一個東東,那就是java 只能支援一個一個的繼承,而python 很牛逼呀,支援多重繼承,這點簡直碉堡了
8.集合的應用:
- 列表:
Java 的列表宣告方法:
List<String> list=new ArrayList<String>(); //此處舉了個儲存型別為String的列表
Python 的列表:
List = [] #宣告是不是很簡單,感覺跟java的陣列宣告有些像
- 字典(map):
這裡的叫法不一樣,python中將鍵值對 key – value 叫作 字典,而java中叫作Map,但實際的儲存方式其實都是鍵值對
Java 宣告辦法:
Map<String,String> map = new HashMap<>(); //聲明瞭一個鍵值都為String型別的map
Python宣告辦法:
Dic = {} #依然簡單粗暴
- set
java 宣告方法:
Set<String> set = new HashSet<>(); //宣告一個型別為String的set
Python宣告辦法:
set () #此處需要記住這裡必須得有set 這個單詞在,大小寫也記住,要不然直譯器也不知道你宣告的是啥玩意
至此,我的總結暫時完了,總結的都是些很初級的東西,主要說我本身就很初級~ 但是還是懷著互相學習的精神來寫了我這篇處女帖,但我真心不知道咋排版。原諒渣渣得我,我也在努力不渣!有誰有啥問題,可以帖子留言~假如真有問題我一定會改的!