<wbr id="juant"></wbr>
  • <wbr id="juant"></wbr>
    更多課程 選擇中心


    Python培訓

    400-111-8989

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

    • 發布:張楊
    • 來源: Python學習部落
    • 時間:2017-12-11 16:45

    最近在后臺,有很多的同學私聊我說,PythonJava.,哪個具有前景呢?今天我們就來簡單的講一下這兩者的區別:

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

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

    Python:

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

    語言方面, 舉幾個例子:

    一切都是對象!!!

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

    因為是對象,所以你當然可以傳來傳去啦. 比如:

    class A:

    def __init__(self):

    print "init A"

    def run(self):

    print "run A"threading.Thread(target=A).start() #: 在另一個線程執行A()a = A()threading.Thread(target=a.run).start() #: 在另一個線程執行a.run() ... # 驚呆沒有,這是怎么做到的?? 也許你該看看描述符的概念

    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可不得了.

    缺點:

    要敲好多代碼, 參考上面的例子...

    沒有Python那些奇葩特性, 靈活性不足,怎么寫你還是Java, 而Python可以寫的像Javascript/Lisp/Matlab.....

    簡單來說, Python是給人設計的(人生苦短,請用Python), C/C++更像是為機器設計的,

    而Java則介于兩者之間.

    本文內容轉載自網絡,來源/作者信息已在文章頂部表明,版權歸原作者所有,如有侵權請聯系我們進行刪除!

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:想學Python有沒有必要報培訓班?
    下一篇:除了 Python,為什么機器學習還需要一種新的編程語言?

    Python培訓班線上線下哪種靠譜

    python線上培訓班學費一般多少

    Python線下培訓班有哪些

    一篇文章帶你了解python和c語言的區別

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    天天日天天射天天干天天伊|奇米电影|奇米网_奇米首页|奇米首页 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>