Python 與 Java 的語法比較

pythonopen 12年前發布 | 5K 次閱讀

這篇是從國外一篇blog翻譯過來,雖然文章里面的個人看法有些偏激,但是確實有很多Python和Java的語法比較的內容,很適合像我這樣搞java轉Python的,權當是Javaer到Pythoner的快速入門吧:)

 

-----------------------------------------------------------------------------------------------------------------------

 

Java VS Python 生產效率 -概述
下面是3個主要的特性能夠讓Python程序員效率高于java程序員

</tr>

</tr>

</tr> </tbody> </table>

 

例子

 

“hello world!”

Java

</td>

Python

</td> </tr>

靜態類型
在java里面所有的變量名稱(和他們的類型)必須被明確的定義,如果嘗試去將某個對象賦予錯誤的類型,只會引起類型異常。這就為什么說java是靜態語言。

java 集合對象(如:Vector和ArrayList)里面可以保存了通用類型對象,但是無法保存基本類型,如int等。要保存int到Vector,你必須 先要轉換int到Integer(注:這里指的1.5版以前的java)。同樣的,當你要從集合中取出一個對象時,已經不記得對象的類型,必須顯示轉換為 期望的類型。
動態類型
在Python里面,你不需要定義任何東西(注:這里主要指的還是變量)。賦值語句將對象賦給某個變量名,并且對象可以是任意類型。如果變量已經被賦予某個類型對象,之后還可以被賦予另外一個不同類型的對象。這就是為什么Python被稱為動態類型。
Python的集合對象(如:lists和dictionaries)里面可以保存任意類型的對象,包括數字和lists。當你從集合中取出一個對象是,他仍然記得這個對象的類型,所以無需進行類型轉換。
靜態類型vs動態類型的更多信息,看這里
冗長
”大量的語句;使用過程中很多語句并不是必須的”
簡潔(簡練)
只需要幾個簡單的語句就可以表達很多。意味著清晰而簡潔,無需多余的語句就能完成目標。
不緊湊
緊湊
在新的黑客字典里,Eric S. Raymond給予了“緊湊”這樣的定義:
Compact adj. 在設計中,描述有價值的特性并能夠被人們立馬理解。 

Java

</td>

Python

</td> </tr>

public class HelloWorld
{
    public static void main (String[] args)
    {
        System.out.println("Hello, world!");
    }
}
</td>

print "Hello, world!"

print("Hello, world!") # Python version 3
</td> </tr> </tbody> </table>

 

 

例子

下面的例子里,我們初始化integer為0,再把他轉為string,最后檢查他是否為空。注意,數據的聲明在java里是必須的,但Python里不是。還會注意到即時只是在簡單的比較兩個字符串的時候,java代碼還是會顯得冗長。

Java

</td>

Python

</td> </tr>

int    myCounter = 0;
String myString = String.valueOf(myCounter);
if (myString.equals("0")) ...
</td>

myCounter = 0
myString = str(myCounter)
if myString == "0": ...
</td> </tr>

// print the integers from 1 to 9
for (int i = 1; i < 10; i++)
{
   System.out.println(i);
}
</td>

#print the integers from 1 to 9
for i in range(1,10):
    print i
</td> </tr> </tbody> </table>

 

例子

你的應用有15個class。(準確的說是15個頂層的public class)。

</tr> </tbody> </table>

 

例子

在你的應用中,A方法調B方法,B調C,C調D,D調E,E調F。當你發現F必須拋出SpecialException異常,它必須被A捕獲時。

Java

</td>

Python

</td> </tr>

每個頂層的public class都必須定義一個單獨的文件。如果你的應用有15個class,那就有15個文件。 多個class可以被定義到單個文件中。如果你應用有15個class,只要你愿意甚至可以將整個應用都存放到一個文件中,但是更明智的情況是將這些class分散到4-6個文件中。

</tr> </tbody> </table>

這個原因還是因為java事實上是封閉的面向對象程序語言,使用了checked exception --- 在異常出現的每個方法中,他們必須被拋出或捕獲,否則連編譯都無法通過。

 

例子

你的應用里面有個Employee class,當一個Employee的實例被創建,構造函數可能傳入1個、2個或者3個參數。

如果是在java中,這意味著你必須寫3個不同參數的構造函數。如果你用Python,你只用寫一個帶可選參數和默認值的構造函數。

Java

</td>

Python

</td> </tr>

你必須在F中throw SpecialException,然后在A中進行catch。
同時
你必須在B、C、D、E和F,每個方法上都申明”throws SpecialException”。
你必須在F中rasie SpecialException,并在A中進行catch。由于異常會自動往上升,所以你不需要做任何其他事情。

  • Java

    </td>

    Python

    </td> </tr>

    public class Employee
    {
        private String myEmployeeName;
        private int    myTaxDeductions = 1;
        private String myMaritalStatus = "single";

    //--------- constructor #1 -------------
    public Employee(String EmployeName)
    {
        this(employeeName, 1);
    }
    
    //--------- constructor #2 -------------
    public Employee(String EmployeName, int taxDeductions)
    {
       this(employeeName, taxDeductions, "single");
    }
    
    //--------- constructor #3 -------------
    public Employee(String EmployeName,
           int taxDeductions,
           String maritalStatus)
    {
       this.employeeName    = employeeName;
       this.taxDeductions   = taxDeductions;
       this.maritalStatus   = maritalStatus;
    }
    

    ...</pre> </td>

    class Employee():

    def __init__(self,
        employeeName
        , taxDeductions=1
        , maritalStatus="single"
        ):
    
        self.employeeName    = employeeName
        self.taxDeductions   = taxDeductions
        self.maritalStatus   = maritalStatus
    

    ...</pre>


    在Python中,一個類只包含一個構造函數。
    構造方法都是用的特殊的名字:__init__
    </td> </tr> </tbody> </table>

     

     

    例子

    關于緊湊(注:略去”名人名言“若干)

    Java

    </td>

    Python

    </td> </tr>

    import java.io.*;
    ...

    BufferedReader myFile = new BufferedReader( new FileReader(argFilename));</pre> </td>

    # open an input file
    myFile = open(argFilename)
    </td> </tr> </tbody> </table>

     

     

    例子

    string處理能力的比較

    </tr>

    </tr>

    </tr> </tbody> </table>

     

    例子

    將int加到Vector

    功能

    </td>

    Java

    </td>

    Python

    </td> </tr>

    去掉頭尾空格 s.trim() s.strip()
    去掉頭部空格 未提供 s.lstrip()
    去掉尾部空格 未提供 s.rstrip()

  • Java

    </td>

    Python

    </td> </tr>

    public Vector<Integer> aList = new Vector<Integer>;
    public int    aNumber      = 5;
    public int    anotherNumber;

    aList.addElement(aNumber); anotherNumber = aList.getElement(0);</pre> </td>

    aList = []
    aNumber = 5

    aList.append(aNumber) anotherNumber = aList[0]</pre> </td> </tr> </tbody> </table>

     

     

    例子

    Java

    </td>

    Python

    </td> </tr>

    if ( a > b ) {     a = b;     b = c; }
    </td>

    if  a > b :     a = b
        b = c
    </td> </tr> </tbody> </table>

     

     

    原文地址:http://pythonconquerstheuniverse.wordpress.com/2009/10/03/python-java-a-side-by-side-comparison/

    轉自:http://xflykkk.iteye.com/blog/1337444

     本文由用戶 pythonopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
    寫博客

    博客分類

    推薦閱讀

    Python 與 Java 的語法比較

    這篇是從國外一篇blog翻譯過來,雖然文章里面的個人看法有些偏激,但是確實有很多Python和Java的語法比較的內容,很適合像我這樣搞java轉Python的,權當是Javaer到Python...

    Golang 語法速記

    // Description: Golang語法與代碼格式速記 // Author: cxy // Date: 2013-04-01 // Version: 0.3 // TODO 說明 // ...

    ibatis和hibernate的比較

    IBATIS: iBATIS一詞來源于“internet”和“abatis”的組合,是一個由Clinton Begin在2001年發起的開放源代碼項目,最初側重于密碼軟件的開發,現在是一個基于J...

    ibatis和hibernate的比較

    IBATIS: iBATIS一詞來源于“internet”和“abatis”的組合,是一個由Clinton Begin在2001年發起的開放源代碼項目,最初側重于密碼軟件的開發,現在是一個基于J...
  • sesese色