[轉載] python與c/c++相比有哪些優勢

參考鏈接: Python輸入和C++, Java速度對比

理論上,python的確比C/C++慢(我對Java的開發沒有經驗,無法評論)。這一點不用質疑。 C/C++是編繹語言,直接使用的是機器指令,而python總是跑在的虛擬機上, 把一個邏輯直接轉換為機器指令,和把同樣的邏輯轉換為字節碼,然后再轉換為機器碼來執行相比, 總是要高上一大截,這一點,有各種各樣的性能報告,我沒有必要,也沒有必要去做出這樣一個報告來, 我記得大概的數值是一到兩個數量級,用C++的話來說,這就是所謂的抽象懲罰。?

但實踐上,并非這么簡單。 現實開發者領域,總是新手遠多于高手,而從新手轉為高手的時間相比,C/C++使用者花費的時間要比Python使用者多的多,保守的估計是5~10倍。?

這有兩方面原因,一方面, C/C++(尤其是C++)的確是“博大精深”,而且總是有無窮無盡的細節,如果你是一個真正的開發者,你就會明白,實際上,就完全精通C/C++編繹器的選項,就足夠學兩門python了(一點都不夸張,我遇到很多做兩三年的C++開發者,遇到一個編譯或者鏈接問題都一籌莫展),而編繹器僅僅是C++開發過程中的最后一環而已,你可以不懂,但你總得要花時間去弄懂,因為,作為一個開發者,這是每天都要面對的問題,否則你給別人一個什么東西,像python一樣,給個源文件?:)等你搞懂了指針,搞懂了數組,你還得搞懂指針與數組之間微妙的關系,等你搞懂了引用,你又不得不搞清引用與指針的區別,等你弄清了static 不同的用法,你又得明白vector> 與vector > 是不一樣的,盡管只是小小一個空格,然后呢?學習STL(不要告訴我你在C++直接不用STL開發應用),實際上STL對于現實應用來說,太差強人意了,如要你常做字符處理,你就明白我說的是什么了,然后Boost?然后…,終于有一天,你可以開始真正做應用了,一年過去了?:) 另一方面,C++的開發經歷絕對是充滿荊棘和驚喜,以及沮喪,等你達到C/C++的自由王國,你一定是身經百戰,但腦袋中還是有一個弦在緊繃,因為,一不留神,你就又得沒日沒夜的與奇妙的錯誤作戰,這就是C++的開發感受。而且,C/C++的編碼風格問題,一直是開發中充滿爭議的問題,我見過太多的關于風格問題的,毫無意義的爭吵,但是很極少見到最終哪一種風格會令人每個人信服。?

申請阿里云服務時,可以使用2000元阿里云代金券,阿里云官網領取網址:https://dashi.aliyun.com/site/yun/youhui (長期有效)?

說說python吧,學習過程是這樣的,數據類型是如此面向問題,沒有了令人討論的unsigned , short , long,這種這輩子我都不愿弄懂的修飾, 類型連同支持的操作是如此的易懂,一旦你明白了,從Sequence / Mapping緯上看問題,很容易區分list與dict,一旦你明白了Imutable與mutable的意義,你就很容易猜到,tuple與list ,set與frozenset, 的不同方法,一旦明白了list 的inplace-op與string的 non-inplace-op實現,就很容易猜到方法的使用方式,另一方面,符合現實問題的邏輯表達式,通用的len, 簡潔的 a, b = b,a,讓你覺得一切井然有序,而且簡單明晰。強大而廣泛且標準庫,都把問題與實現的距離接近到了可以動手的距離。語法中相當部分約束,減少了不必要語言風格爭論(私下認為,那怕是一個最難看的固定語法都比臨時去決策如何去用來的好),這也加速了開發的步伐,況且還有一個風格標準建議在PEP中。阿里云服務器1核2G低至89元/年,阿里云官活動網址:https://dashi.aliyun.com/site/yun/aliyun?

現實中,我不相信一個三個月或六個月的應用項目,使用python會比使用C++/C開發出來的系統慢。因為,開發者總是人, 擁有同樣開發年限的C++/C程序員與python程序員對語言精通的程序是截然不同的,特別情況下,python程序員是已經真正進入了經驗積累期,而可能C++/C程序員才剛剛有了開發的感覺。如果可以做這樣一個實驗,真實的情況,可能是這樣的,python開發者,早就完成系統測試,著手進行性能的優化,考慮使用C/C++替換部分性能的瓶頸,而C/C++程序可能為集成測試的不完整在正在惴惴不安,信號是,由于程序員的技能問題,項目可能要延期。?

附:python與c語言運行效率對比?

Python是個非常流行的解釋型腳本語言。C是一個非常流行的編譯語言。由于其編譯的性質,導致C一般比Python要快,但是它是更底層的。相對的,Python編程更加快速和簡單。譯者注:在目前最權威的TIOBE編程語言排行榜上,Python和C語言分處榜上第6和第2的高位,在腳本語言和編譯語言中分別坐著第二把交椅(第一把交椅分別是PHP和Java)。?

問題在于,Python程序(在沒有輸入的情況下)運行時所額外花費的時間相對C而言是否更加劃算,以及運行時所用的時間是否比編程時間更加重要。?

系統程序?

我決定建立一個簡單的程序,該程序可以處理以下公式的計算:?

{ x + y = 14?

{ x^2 + y^2 = 100 我很快用Python寫了一遍,找到了答案。然后,我將其翻譯成C語言。我知道,在C語言中的同一程序會花費比Python更多一些的代碼,但是這并非是我所注意的問題。在繼續之前,讓我們看看代碼:?

Python:?

x = 1 while x <= 14: y = 14 - x print str(x) + “|” + str(y) if x2 + y2 == 100: print “match” x = x + 1?

C:?

#include (<)stdio.h(>) int main() { int x, y, t; for (x = 1; x <= 14; x++) { y = 14 - x; printf("%d|%dn", x, y); if ((xx) + (yy) == 100) printf(“matchn”); } return 0; } 我總是聽說C語言永遠是最快的語言之一。在命令端口運行這兩個程序,我并沒看出這兩個的運行速度有任何差別。所以我打開Ubuntu的命令端口,并輸入如下代碼:?

time ./a.out (time指令,緊跟著可以脫離time指令而單獨運行的普通指令,運行指令并計時——很明顯,這里的測試對象是C程序。)我得到0.001秒real time(真實用時),而user time(用戶用時)和system time(系統用時)都是0。?

接下來是Python: time python system.py 結果有些嚇人:0.017秒real time,0.012秒user time,0.004秒system time。?

當然了,real time的差別畢竟只有16毫秒,不過在長時間運行大量運算的大系統下這個差別就很明顯了。?

百萬程序 我決定將這個設想付諸現實。我寫了另一個程序,這個程序將0到1000000之間的所有整數,包括0,依次print輸出。當然這和我之前提到的大量運算的情況還是不同的,不過還是給了計算機比較多一些需要print的內容。?

Python:?

i = 0 while i (<) 1000000 print i i = i + 1?

C:?

#include (<)stdio.h(>) int main () { int i; for (i = 0; i <> printf ("%dn", i); return 0; }?

然后是測試結果:?

C:?

real 0m24.625s user 0m0.652s sys 0m2.240s?

Python:?

real 0m29.805s user 0m1.984s sys 0m1.812s 結論?

我承認,每個語言都有其優勢和弱點。但從以上結果看來,我只會在像上面這些小程序這樣快捷的編程中,或為C程序建立原型的時候才會用Python,而在運行花費時間更重要的任務中,我無疑會選擇C語言。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540613.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

清空日志的三種方法

方法一&#xff1a;echo "" >test.log方法二&#xff1a;> test.log方法三&#xff1a;cat /dev/null >test.log轉載于:https://www.cnblogs.com/liang545621/p/7528509.html

splat net_Ruby中的Splat參數

splat netRuby Splat參數 (Ruby Splat Arguments) We have learnt how to work with methods in Ruby? We are very well aware of the fact that methods may or may not consume any arguments. Let us discuss the methods which consume argument or have a predefined ar…

ajax的訪問 WebService 的方法

轉自原文 ajax的訪問 WebService 的方法 如果想用ajax進行訪問 首先在web.config里進行設置 添加在 <webServices> <protocols> <add name "HttpPost" /> <add name "HttpGet" /> </protocols> </webServices> <s…

[轉載] 使用DirectInput進行交互

參考鏈接&#xff1a; input()函數中的漏洞– Python2.x 使用DirectInput進行交互&#xff08;1&#xff09; DirectX 2008-08-10 15:11:34 閱讀169 評論0 字號&#xff1a;大 中 小 訂閱 輸入設備簡介 計算機通常使用三種輸入設備&#xff1a;鍵盤、鼠標和游…

c語言 nan 常量_NaN32常量(Julia)

c語言 nan 常量Julia| NaN32常數 (Julia | NaN32 Constant) NaN32 is a constant of the Float32 type in Julia programming language, it represents "not-a-number" value. NaN32是Julia編程語言中Float32類型的常量&#xff0c;它表示“非數字”值。 Syntax: 句…

Hyperledger Fabric 1.0 從零開始(七)——啟動Fabric多節點集群

5&#xff1a;啟動Fabric多節點集群 5.1、啟動orderer節點服務 上述操作完成后&#xff0c;此時各節點的compose配置文件及證書驗證目錄都已經準備完成&#xff0c;可以開始嘗試啟動多機Fabric集群。 首先啟動orderer節點&#xff0c;切換至orderer.example.com服務器&#xff…

[轉載] python中print()函數的用法和end=““不換行詳解

參考鏈接&#xff1a; Python | print()中的結束參數 需求&#xff1a;打印五個字符&#xff0c;在一行上 代碼&#xff1a; i 0 while i< 5 : i 1 print(i,end’’) 結果&#xff1a; 1 2 3 4 5那么問題來了&#xff0c;為什么加一個end"" 就不換…

css中圖片左右邊距_CSS中的邊距

css中圖片左右邊距CSS保證金屬性 (CSS margin property) CSS Margins are used to space around any element, for this we use "margin" property in the CSS. CSS邊距用于在任何元素之間留出空間&#xff0c;為此&#xff0c;我們在CSS中使用“ margin”屬性 。 S…

js 實現網頁顯示倒計時

用 js 來實現網頁顯示倒計時效果 1 function checkTime( time ){2 var data new Data(); // 獲取現在時間3 var nowData data.getTime(); // 轉化成毫秒數4 var time ; // 結束的時間5 var t time - nowData ;6 var HH, mm , ss 0;7 var sta "…

scala方法中的變量_Scala中的變量

scala方法中的變量Scala變量 (Scala variables) A variable is named a reference to a memory location. The location stores the data that is used by the program. 變量被稱為對存儲位置的引用。 該位置存儲程序使用的數據。 Based on the data type of the variable the…

[轉載] python[1]-print中的sep、end參數

參考鏈接&#xff1a; Python | print()中的sep參數 讀示例程序代碼時遇到的問題&#xff0c;看不懂end和sep參數。經過查找&#xff0c;基本弄清楚了。 sep&#xff1a;可以設置print中分割不同值的形式。應該是separation的縮寫。 end&#xff1a;可以設置print打印結束時最…

分區 主分區 和 擴展分區_等和分區

分區 主分區 和 擴展分區Description: 描述&#xff1a; This is a popular interview coding problem which has been featured in interview rounds of Amazon, Oyo rooms, Adobe. 這是一個受歡迎的采訪編碼問題&#xff0c;已在亞馬遜&#xff0c;Oyo房間&#xff0c;Adobe…

ORACLE 物理讀 邏輯讀 一致性讀 當前模式讀總結淺析

在ORACLE數據庫中有物理讀&#xff08;Physical Reads&#xff09;、邏輯讀&#xff08;Logical Reads&#xff09;、一致性讀&#xff08;Consistant Get&#xff09;、當前模式讀&#xff08;DB Block Gets&#xff09;等諸多概念&#xff0c;如果不理解或混淆這些概念的話&a…

[轉載] Java Formatter toString()方法與示例

參考鏈接&#xff1a; Python | 輸出格式化 output format 格式化程序類toString()方法 (Formatter Class toString() method) toString() method is available in java.util package. toString()方法在java.util包中可用。 toString() method is for the string representat…

arm tbh_TBH的完整形式是什么?

arm tbhTBH&#xff1a;說實話 (TBH: To Be Honest) TBH is an abbreviation of "To Be Honest". It is internet slang which generally used as an acronym or hashtag over the internet on social media networking sites like Facebook, Instagram, Twitter, Yo…

異常:fatal: unable to access 'https://git.oschina.net/pcmpcs/library.git/': Could not resolve host...

git fork項目時出現的異常. 原因: 我以前用的是ssh地址做的遠程通信地址&#xff0c;而這次是用的是https&#xff0c;因為很久沒用&#xff0c;所以忘記了以前是用ssh的了。解決方案一&#xff1a;復制ssh協議的地址&#xff0c;然后再關聯遠程倉庫。并且在VCS下的git下的Rem…

計數器數組_子數組計數

計數器數組Problem statement: 問題陳述&#xff1a; Given an array of N positive integers a1, a2, ..., an. The value of each contiguous subarray of a given array is the maximum element present in that subarray. The task is to return the number of subarrays…

[轉載] 列表、元組及通用序列操作

參考鏈接&#xff1a; Python | 重點數據類型 (字符串&#xff0c;列表&#xff0c;元組&#xff0c;迭代)(String, List, Tuple, Iteration) 序列是Python中最基本的數據結構&#xff08;一些基本特性類似于C中的數組模板類&#xff09;&#xff0c;序列中的每一個元素都有相…

onActivityResult()后onresume()

當你調用完一個存在的activity之后&#xff0c;onActivityResult將會返回以下數據&#xff1a;你調用時發出的requestCode、被調用activity的結果標志resultCode&#xff08;如RESULT_OK&#xff09;和其他的額外數據。我們期望的都是得到RESULT_OK&#xff0c;表示調用成功&am…

java反射用法示例_Java包| 類型,用法,示例

java反射用法示例配套 (Packages) Packages in Java is simply a mechanism to encapsulate (i.e. to put in a short and concise form) a group of classes,interfaces,enumerations, sub packages, etc. In real world, application is developed in such a manner so that …