<abbr id="ciwa6"><option id="ciwa6"></option></abbr>
  • <sup id="ciwa6"><kbd id="ciwa6"></kbd></sup>
    <small id="ciwa6"></small>
  • 千鋒教育-做有情懷、有良心、有品質的IT職業教育機構

    你所在的位置:首頁 > 常見問題

    Python 相較于Java 而言,有什么優勢?

    時間:2017-12-27 16:56:37 來源:千鋒教育  作者:

       作為一個數年C/Java/Python混合開發者, 我談談我的感受.

      我認為C, Java跟Python都是非常成功的語言, 具體選哪種看你的場景.

      言歸正傳,來對比一個Python跟Java.

      Python:

      優點 ( 知乎怎么不能把這行字變大點??):

      語法簡潔優美, 功能強大, 標準庫跟第三方庫灰常強大, 應用領域非常廣: vinta/awesome-python · GitHub(跟PHP形成宣明對比!)

      語言方面, 舉幾個例子:

      一切都是對象!!!

      類(class本身)/函數/類方法是callable的對象

      List表達式(其他好多語言也有,但是我喜歡python的寫法):

      把"1023"變成 [1, 2, 3]

      [ int(x) for x in "1023" if x != "0" ]

      (當前你可以用Lisp風格的: map(int, filter(lambda x: x != "0", "1024")))

      對dict也是類似:

      adict = {"a":1, "b":2}

      {k: v*2 for k, v in adict.items() }

      yield關鍵字:

      當你需要返回很多東西然后一個一個用的時候, 你可以一次返回一個

      def xrange(n):

      i = 0

      while i < n:

      yield i

      i += 1

      用法:

      for i in xrange(10):

      print i

      裝飾器@:

      把something_heavy()返回的結果緩存起來(以函數名+args為緩存的鍵值,只緩存近使用的10條)

      @functool.lru_cache(10)

      def something_heavy(args):

      #各種耗時操作.....

      pass

      運算符重載:

      試試numpy, 你會驚呆的, 操作向量/矩陣跟基本類型一樣方便

      缺點:

      慢

      目測python是慢的腳本語言,比V8上的JS還慢不少. (研究一下描述符,你會發現python調用對象方法的開銷好大!)

      但是python創始人說了, 一般程序的瓶頸在于20%的代碼, 所以你可以把那20%的代碼用C重寫(而python是膠水語言,用C重寫部分代碼當然很easy啦)

      同時,你可以試試PyPy, 引入了JIT技術

      動態類型

      有人說: 動態類型寫時爽, 重構起來是災難(原諒我記不得原話..).

      對于不寫unittest, 不做代碼覆蓋率測試的人來說, 動態語言當然是危險的, 拼寫錯誤都可能被隱藏, 重構?別搗亂!

      python創始人有話說: "如果你認為編譯器可以幫你解決所有問題,那你一定干編程沒多久" (鄙人深有體會,曾經年少輕狂的我非常鄙視javascript), "不管什么程序,都需要寫testcase, 既然要寫testcase, 那么動態類型不是問題!"

      在此推薦大家兩個工具: py.test python-coverage

      Java:

      優點

      用幾個詞形容一下Java語言: 優美, 嚴謹, 健壯,不易出錯.

      當然, 使用也非常的廣泛: 常年盤踞編程人員數量排行榜名!

      各種庫也灰常多: akullpp/awesome-java · GitHub

      同樣的代碼, 相比C++(甚至python), Java代碼出BUG的概率要小點(當然,寫的時候一般會比python長).

      Java從語言設計上盡量避免了程序員犯錯, 比如自動垃圾回收, 拋棄無符號類型, 安全的枚舉, 編譯期泛型檢查(Java1.5之后加入的泛型,但是只是用來做編譯器檢查,運行時跟以前一樣), 強制的異常處理(遇到異常必須catch或者申明throws) 等等(當然,某些特性python也有.)

      Java標準庫和好多第三方代碼都充斥著濃濃的設計感!!!, 各種設計模式到處可見. 從下面的語句可以看出一點來:

      new BufferedInputStream(new FileInputStream(new File("somepath")))

      尼瑪, 好多字, 看我的:

      C:

      fopen("somepath", "r")

      Python:

      open("somepath")

      Java代碼多,但是API可復用行強,選擇多(我想一次讀完文件,不要buffer呢?)

      因為健壯安全,所以Java成了企業級后臺的標準. 想想銀行后臺, 關鍵地方出點bug可不得了

    熱帖推薦

    • 成都地址:成都市武侯區科華北路62號力寶大廈N(北樓)18樓
      面授課程:iOS課程培訓、Android課程培訓、HTML5課程培訓、UI課程培訓
    • 北京天豐利校區:北京市海淀區寶盛北里西區28號天豐利商城4層
      北京沙河校區:北京市昌平區沙陽路18號北京科技職業技術廣場服務樓2層、南區服務樓2層
      咨詢電話:400-654-7778 010-82790226-801
      面授課程:iOS培訓、Android培訓、HTML5培訓、UI培訓、PHP培訓、JavaEE培訓、好程序員
    • 深圳科技園校區:深圳市南山區科苑南路高新技術產業園R3-B棟5層
      深圳大學城校區:深圳市南山區留仙大道1201號大學城創客小鎮16棟2樓、3樓
      深圳西部硅谷校區:深圳市寶安區寶安大道5010號西部硅谷B座A605-619
      咨詢電話:0755-86681178/9-801
      面授課程:iOS培訓、Android培訓、HTML5培訓、UI培訓、PHP培訓、JavaEE培訓、好程序員
    • 上海地址:上海市寶山區同濟支路199號智慧七立方3號樓2-4層
      咨詢電話:400-627-7899 021-65025129-602
      面授課程:iOS課程培訓、Android課程培訓、HTML5課程培訓、好程序員
    • 鄭州地址:鄭州市金水區緯五路21號河南教育綜合樓(經緯中學樓)6/7/8層
      咨詢電話:0371-55911950 400-654-7778
      面授課程:iOS課程培訓、Android課程培訓、HTML5課程培訓、UI課程培訓
    • 廣州地址:廣州市天河區元崗路310號智匯park創意園E座5層
      咨詢電話:020-22119207 400-654-7778
      面授課程:iOS課程培訓、Android課程培訓、HTML5課程培訓
    • 大連地址:大連市甘井子區軟件園路2號B8座二樓
      咨詢電話:0411-39026086 400-654-7778
      面授課程:iOS課程培訓、Android課程培訓、HTML5課程培訓
    • 武漢地址:武漢市東新區光谷大道77號金融港B26棟9樓
      咨詢電話:027-59905909 027-59905908 027-59905902
      面授課程:iOS課程培訓、Android課程培訓、HTML5課程培訓
    • 西安南二環校區:西安市二環南路西段60號永安大廈4層
      西安科技園校區:西安市雁塔區高新六路52號立人科技園C座西區4層
      咨詢電話:029-85260160 029-85261030 029-85260960
      面授課程:iOS課程培訓、Android課程培訓、HTML5課程培訓
    • 杭州地址:浙江省杭州市江干區九堡旺田書畫城A座4層
      咨詢電話:0571-86893632 010-82790226-801
      面授課程:iOS課程培訓、Android課程培訓
    • 青島校區地址:青島市市南區金壇路17號青島職業技術南校區實訓樓A4層
      咨詢電話:0532-80910752/3 010-82790226-801
      面授課程:iOS課程培訓、Android課程培訓
    • 掃碼匿名提建議
      直達CEO信箱