成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python編程語言與Java的性能比較

開發 后端
Python編程語言在實際的使用中會有不少人和其他的語言進行比較。下面我們就向大家介紹下Python編程語言和Java之間的比較

Python編程語言目前的使用中需要不斷的學習。下面我們就詳細的看看如何才能更好的進行相關知識的學習。最近我一直在看一個基于wxPython的GUI應用程序代碼,大概45.5KLOC的左右,而且這還不包括它所用到的庫(如Twisted)。

代碼是由那些對Python比較生疏的Java的開發者寫的,所以它存在很嚴重的性能問題(如三十秒的啟動時間)。在檢查代碼的時候,我發現他們寫了很多在Java中能講得通但是對Python編程語言來說去卻是很難接受的東西。并不是因為“Python比Java慢”,而是因為在Python中有更方便的方法去完成同樣的目標,甚至是在Java中不可能的事情。

所以,令人難過的事就是這些家伙事倍功半,寫的那些代碼比本應合乎用Python編程語言實現的慢很多。下面,讓我們來看一些例子:

◆Java中的靜態方法不能翻譯成Python的類方法。哦,當然,他多多少少也能產生同樣的效果,但類方法的目的實際上是做一些通常在Java中甚至都不可能的事情(如繼承一個非默認的默認函數)。Java靜態方法慣用的翻譯通常翻譯成一個模塊級的函數,而不是一個類方法或靜態方法。(并且靜態常量應該翻譯成模塊級常量.)
這不是性能上的問題,但是一個Python編程語言程序員如果想調用Foo.someMethod,他要是被迫采用像Java中Foo.Foo.someMethod的方式去做的話,那么他就會被逼瘋的。有一點一定要注意:調用一個類方法需要一個額外的存儲空間,而調用靜態方法或函數就不需要這樣.

對了,還有就是這些Foo.Bar.Baz的屬性鏈也不是自己就能數出來的.在Java中,這些帶點的名稱是有編譯器來查找的,運行的時候并不會去考慮一共有多少.而在Python中,查找的過程是在運行時進行的,所以要包括每個點.(在Python中,要記住一點,"平鋪的結構別嵌套的要好",盡管相對于從性能方面來說,可能它更多涉及的是"可讀性"和"簡單要比復雜好".)

◆要使用switch語句嗎?Python編程語言將是一個哈希表,不是一堆if-then語句。要使用在Java中不是switch語句而且還有字符串參與了的一堆if-then語句嗎?它將仍然是一個哈希表。CPython字典是用在我們所了解的領域中認為是***性能之一的哈希表來實現的。你自己所寫的代碼也不會比這個再好了,除非你是Guido、Tim Peters和Raymond Hettinger的私生子,而且還是遺傳增強了的。

◆XML不是答案。它也不是一個問題?,F在用正則表達式來解釋Jamie Zawinski,“一些人,當他遇到一個問題的時候,就會想‘我知道,我要用XML.’那么他們就有兩個問題了。”

相對于在Java中來說這是個不同的情況,因為比起Java代碼,XML是靈活而且有彈性的。但比起Python的代碼來,XML就是一個船錨,一個累贅。在Python中,XML是用來協同工作的,而不是你的核心功能,因為你不需要那么做。在Java中,XML可能是你的救世主,因為它讓你實現了特定領域的語言并且“不用編碼”就提高你的應用程序的適應性。在Java中,避免編碼是一個很大的優勢,因為編碼意味著重新編譯。但在Python中,通常是,寫代碼比寫XML更簡單。還有就是Python處理代碼要比處理XML快很多很多。(不僅僅是這個,你必須寫XML處理代碼,同時Python就已經為你寫好了.)

如果你是一個Java程序員,你并不能利用本能知覺來考慮你是否要在你的Python核心應用中使用XML作為一部分。如果你不是因為信息交互的原因去實現一個已經存在的XML標準或是建立某種輸入、輸出格式或者建立某種XML編輯器或處理工具,那么就不要這么做。根本不要去這么做。甚至連想都不要想?,F在,丟掉那個XML模式然后把你的手解放出來吧!如果你的應用程序或者平臺要被Python編程語言開發者使用,他們只會感謝你不要在他們的工作中添加使用XML的負擔。

(這里唯一的例外是如果你的客戶(your target audience)確確實實因為某些原因而需要使用XML。就好像,他們拒絕學習Python但如果你使用XML他們就給你付錢,或者你打算給他們一個很棒的能編輯XML的GUI,還有就是這個XML的GUI是另一個人寫的,同時你得到免費使用的權利。還有一些很少見的架構上的原因需要用到XML。相信我,它們不會應用到你的程序中去的。如果有疑問,對一個資深的Python開發員解釋你的用例?;蛘?,如果你臉皮厚而且不介意被人嘲笑的話,試試向一個Lisp程序解釋你的程序為什么要用XML!)

◆Getter和setter是惡魔。我應該說它是惡魔,是魔鬼!Python編程語言對象不是Java Bean。不要寫什么getter和setter,而是還把它們內置在“屬性”里面。它直到你能證明你需要比一個簡單訪問復雜一點的功能時才有意義,要不然,不要寫getter和setter。它們是CPU時間的浪費,更要緊的是,它們還是程序員寶貴時間的浪費。不僅僅對于寫代碼和測試的人,對于那些要閱讀和理解它們的人也是。

在Java中,你必須使用getter和setter,因為公共字段不允許你以后改變想法再去使用getter和setter。所以,在Java中你***事先避開這些"家務雜事".在Python中,這樣做很傻,因為你可以以一個普通特性開始并可以在任何時間改變你的想法,而不用影響到這個類的任何客戶。所以不要寫getter和setter方法。

◆代碼重復在Java中通常來說就是一場不可避免的災禍,你必須經常反復地寫同一個方法而只有一點點的變化(通常是這是因為靜態類型約束)。在Python中這樣做是沒有必要的也是不值得的(除了極少數一些特定的場合需要內聯一些要求性能的函數)。如果你發現自己一遍一遍在寫同樣的代碼而且變化很少,你就需要去學一下閉包。他們實際不并是那么可怕。#t#

這就是你要做的。你寫了一個包含了函數的函數。這里內部的函數就是你要一遍遍寫的函數的模版,但是在里面加入了針對不同情況的函數要使用變量。外部的函數需要剛剛提高的那種變量作為參數,并且將內部的函數作為結果返回。然后,每次你要寫另一種略微不同的函數的時候,你只要調用這個外部的函數,并且把返回值賦給你要讓“重復”函數出現的名字?,F在,如果你需要改變這個工作方式,你只需要改變一個地方:這個模版。

在我所看過的應用程序/平臺中,只有一個很微不足道的程序使用了這個技術,它去掉了數百行重負的代碼。實際上,因為開發者使用了特別的樣板文件來為這個平臺開發插件,所以這會節省很多很多第三方開發人員的代碼,同時也使那些程序員要學習的東西變得簡單了。

這只是Java->Python編程語言思維方式轉變的冰山一角而已,現在我能正確的轉變而不用去鉆研程序的細節。本質上,如果你曾經用過一段時間Java,而且對Python比較陌生,那么你不要太相信自己的本能。你的本能已經被Java調節,而不是Python。向后退一步來說,最重要的是不要再寫這么多代碼了。

為了這樣做,讓自己覺得更加需要Python。假裝好像Python是可以做任何你想做的魔棒,而你無須出一點力。問一下,“Python怎樣解決我的問題?”還有“Python語言的哪個特點和我的問題最相似?”如果對于你需要的東西其實已經有了某種固定形式,那么你絕對會感到驚訝的。事實上,這種現象實在是太普遍了,甚至即使在很有經驗的Python程序員中也會出現,以至于Python社區中給這種現象起了個名字。我們稱之為“GUIDO的時間機器”,因為在我們自己還沒有掌握它之前,通常看上去要得到我們所需要的東西好像那是唯一的方法。

所以,如果你在使用Python編程語言時候不能感到比使用Java要至少多出10倍的生產力話,你就***做一下改動,你是不是忘記使用time machine!(chances are good that you've been forgetting to use the time machine)(同時如果你還懷念你的Java IDE,你可以這樣想:因為你寫的Python程序比他所需要的要復雜得多.)

責任編輯:張浩 來源: 互聯網
相關推薦

2020-07-27 08:24:42

編程語言C語言Java

2010-03-11 10:51:19

Python編程語言

2009-05-25 08:39:08

iPhone蘋果移動OS

2023-11-20 10:34:09

語言

2011-04-15 10:26:38

JavaMVC

2009-07-01 18:12:18

JSP的優勢性能比較

2011-07-06 14:18:40

Percona SerMySQL

2009-12-04 19:28:25

FreeBSD 8.0Ubuntu 9.10性能比較

2010-03-10 19:46:07

Python編程語言

2013-04-03 10:04:36

MySQL 5.6

2023-12-11 08:39:14

Go語言字符串拼

2013-12-16 10:20:48

MySQL數據庫

2012-12-03 10:26:51

Scala

2011-05-18 14:52:04

XML

2015-02-05 09:25:51

HTTPSSPDYHTTP2

2019-07-29 09:19:26

編程語言PythonJava

2010-05-31 15:35:33

2023-11-19 21:17:58

GoRust

2010-12-27 16:01:45

jQuery選擇器

2009-12-16 14:10:12

路由技術性能比較
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久九九 | 九九热精品在线 | 91 在线 | 日本在线一二 | 久草免费在线视频 | 天天弄天天操 | 欧美久久久久久久 | 久久精品视频一区二区三区 | 一级黄色播放 | 欧美日韩亚洲三区 | 91麻豆产精品久久久久久 | 日日干日日 | 久久成人国产精品 | 午夜一区二区三区在线观看 | 欧美日韩国产中文字幕 | 午夜精品一区二区三区在线观看 | 国产精品国产a级 | 在线播放亚洲 | 99亚洲精品 | 日韩在线一区二区三区 | 欧美日韩综合视频 | aa级毛片毛片免费观看久 | 毛片一区二区 | 91精品国产91久久久久久吃药 | 欧美free性| 日韩中文在线 | 国产精品一区二区三级 | 国产亚洲成av人片在线观看桃 | 精品久久久久久 | 国产精品久久亚洲 | 91传媒在线观看 | 天天影视网天天综合色在线播放 | 在线观看涩涩视频 | 在线精品一区二区 | 日韩亚洲视频 | 亚洲国产中文字幕 | 亚洲午夜一区二区 | 日本三级电影在线免费观看 | 欧美日韩精品在线免费观看 | 亚洲精品播放 | 午夜欧美a级理论片915影院 |