todayx.org
          todayx.org
          posts - 39,comments - 60,trackbacks - 0

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

          Java

          Python

          靜態類型
          在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. 在設計中,描述有價值的特性并能夠被人們立馬理解。

           

           

           

           

           

           

           

           

          例子

           

           

          “hello world!”

          Java

          Python

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

          print("Hello, world!") # Python version 3

           

           

           

           

           

           

           

          例子

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

          Java

          Python

          int    myCounter = 0; String myString = String.valueOf(myCounter); if (myString.equals("0")) ...
          myCounter = 0 myString = str(myCounter) if myString == "0": ...
          // print the integers from 1 to 9 for (int i = 1; i < 10; i++) {    System.out.println(i); }
          #print the integers from 1 to 9 for i in range(1,10):     print i

           

           

           

           

          例子

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

          Java

          Python

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

           

           

           

           

           

          例子

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

          Java

          Python

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

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

           

           

           

           

           

           

          例子

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

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

          Java

          Python

          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;     } ...
          class Employee():      def __init__(self,         employeeName         , taxDeductions=1         , maritalStatus="single"         ):          self.employeeName    = employeeName         self.taxDeductions   = taxDeductions         self.maritalStatus   = maritalStatus ...

          在Python中,一個類只包含一個構造函數。
          構造方法都是用的特殊的名字:__init__

           

           

           

           

           

           

           

           

           

          例子

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

          Java

          Python

          import java.io.*; ...  BufferedReader myFile =     new BufferedReader(         new FileReader(argFilename));
          # open an input file myFile = open(argFilename)

           

           

           

           

           

           

           

           

           

          例子

          string處理能力的比較

          功能

          Java

          Python

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

           

           

           

           

           

           

           

           

          例子

          將int加到Vector

          Java

          Python

          public Vector<Integer> aList = new Vector<Integer>; public int    aNumber      = 5; public int    anotherNumber;  aList.addElement(aNumber); anotherNumber = aList.getElement(0);
          aList = [] aNumber = 5  aList.append(aNumber) anotherNumber = aList[0]

           

           

           

           

           

           

           

           

           

          例子

          Java

          Python

          if ( a > b ) {     a = b;     b = c; }
          if  a > b :     a = b     b = c

           

           

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


          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted on 2012-01-08 16:25 todayx.org 閱讀(3356) 評論(7)  編輯  收藏

          FeedBack:
          # re: Python與Java語法比較[未登錄]
          2012-01-08 22:14 | stanleyxu2005
          你的比較很不科學。一個是強類型語言,一個是弱類型的腳本語言。用途不一樣,比較一點意義都沒有。  回復  更多評論
            
          # re: Python與Java語法比較
          2012-01-08 22:33 | jackerxff
          幾年前別人寫的Java代碼現在或許還能讀懂 3P1R (PHP Python Perl Ruby) 恐怕只能讀懂 上個月自己寫的  回復  更多評論
            
          # re: Python與Java語法比較
          2012-01-08 23:59 | allenny
          誰說public class只能定義單獨的文件?你也許要說“頂層”,但是是不是頂層又有什么所謂呢  回復  更多評論
            
          # re: Python與Java語法比較
          2012-01-09 00:16 | todayx.org
          @jackerxff

          對 動態語言不好讀   回復  更多評論
            
          # re: Python與Java語法比較
          2012-01-09 09:15 | HiMagic!
          不完整的語言比較,對于程序員來說,視角要更開闊些  回復  更多評論
            
          # re: Python與Java語法比較[未登錄]
          2012-01-09 14:21 | greatghoul
          我也覺得這種比較沒有太大的意義,與其在這些方面比較,不如比較在應用上面的差異 。  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 濮阳市| 阿荣旗| 吴川市| 札达县| 钦州市| 慈溪市| 宁阳县| 林周县| 石嘴山市| 淮安市| 宜春市| 东海县| 葫芦岛市| 陈巴尔虎旗| 玛曲县| 阳山县| 都昌县| 正定县| 盐山县| 水城县| 卢氏县| 彩票| 蒲城县| 德安县| 香港| 达日县| 桑植县| 扬州市| 庆阳市| 醴陵市| 库车县| 齐河县| 石棉县| 大港区| 淮安市| 宁远县| 双桥区| 盐亭县| 班戈县| 石渠县| 奎屯市|