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

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

          Java

          Python

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

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

           

           

           

           

           

           

           

           

          例子

           

           

          “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,再把他轉(zhuǎn)為string,最后檢查他是否為空。注意,數(shù)據(jù)的聲明在java里是必須的,但Python里不是。還會(huì)注意到即時(shí)只是在簡(jiǎn)單的比較兩個(gè)字符串的時(shí)候,java代碼還是會(huì)顯得冗長(zhǎng)。

          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

           

           

           

           

          例子

          你的應(yīng)用有15個(gè)class。(準(zhǔn)確的說(shuō)是15個(gè)頂層的public class)。

          Java

          Python

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

           

           

           

           

           

          例子

          在你的應(yīng)用中,A方法調(diào)B方法,B調(diào)C,C調(diào)D,D調(diào)E,E調(diào)F。當(dāng)你發(fā)現(xiàn)F必須拋出SpecialException異常,它必須被A捕獲時(shí)。

          Java

          Python

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

          這個(gè)原因還是因?yàn)閖ava事實(shí)上是封閉的面向?qū)ο蟪绦蛘Z(yǔ)言,使用了checked exception --- 在異常出現(xiàn)的每個(gè)方法中,他們必須被拋出或捕獲,否則連編譯都無(wú)法通過(guò)。

           

           

           

           

           

           

          例子

          你的應(yīng)用里面有個(gè)Employee class,當(dāng)一個(gè)Employee的實(shí)例被創(chuàng)建,構(gòu)造函數(shù)可能傳入1個(gè)、2個(gè)或者3個(gè)參數(shù)。

          如果是在java中,這意味著你必須寫(xiě)3個(gè)不同參數(shù)的構(gòu)造函數(shù)。如果你用Python,你只用寫(xiě)一個(gè)帶可選參數(shù)和默認(rèn)值的構(gòu)造函數(shù)。

          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中,一個(gè)類只包含一個(gè)構(gòu)造函數(shù)。
          構(gòu)造方法都是用的特殊的名字:__init__

           

           

           

           

           

           

           

           

           

          例子

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

          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

           

           

          轉(zhuǎn)自:
          http://xflykkk.iteye.com/blog/1337444


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

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

          對(duì) 動(dòng)態(tài)語(yǔ)言不好讀   回復(fù)  更多評(píng)論
            
          # re: Python與Java語(yǔ)法比較
          2012-01-09 09:15 | HiMagic!
          不完整的語(yǔ)言比較,對(duì)于程序員來(lái)說(shuō),視角要更開(kāi)闊些  回復(fù)  更多評(píng)論
            
          # re: Python與Java語(yǔ)法比較[未登錄](méi)
          2012-01-09 14:21 | greatghoul
          我也覺(jué)得這種比較沒(méi)有太大的意義,與其在這些方面比較,不如比較在應(yīng)用上面的差異 。  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 昌都县| 睢宁县| 文登市| 开平市| 玉山县| 新巴尔虎左旗| 庐江县| 铁力市| 全椒县| 湖北省| 油尖旺区| 犍为县| 伊宁县| 晴隆县| 万源市| 沾化县| 许昌县| 遂溪县| 商洛市| 团风县| 富裕县| 柯坪县| 玉山县| 紫阳县| 洪泽县| 塘沽区| 玉田县| 金堂县| 德清县| 西畴县| 福海县| 睢宁县| 富源县| 柏乡县| 安吉县| 柘荣县| 钟祥市| 鄄城县| 南通市| 伊金霍洛旗| 昌江|