為什麼Python有那麼多方便的庫而C++很少?
比如Python的matplotlib庫吧,很方便而且甚至內置了從雅虎財經上扒數據的類,連正則表達式都不用輸。。。而C++比起來庫就少的多。。。就算有,很多代碼看起來也亂糟糟的(估計是因為命名規則的問題,我也見過用Java那種命名規則的C++代碼,挺好看的,所以選擇性忽略我這句話),為什麼Python的庫發展的那麼人性化?
首先python有個pip,發布和獲取都比較方便。
其次python的庫,基本上都通用,pip下來就可以直接用了。只適用於py2的庫,也在也很少了。而C++的庫,且不說一堆庫只能在linux下用,一堆只能在win下用。就算可以用的,叫你自己編譯一遍,你就不一定能成功,有些代碼不好的,只能在某些版本的編譯器上才能跑,你就只能哭了。
編譯方法亂七八糟的,有的只支持configure+make,有的是cmake,還有chrome用的那啥玩意忘記名字了。大一點的編譯要幾個小時,在win下還要編譯debug和release兩個版本。編譯好了,用的時候還要自己去配置頭文件路徑,庫文件路徑,鏈接的時候鏈接上才能使用。一不小心就會有各種鏈接錯誤無從查起。python的庫做起來也很方便,你可以無所顧忌地用已有的庫來節省開發。而C++的庫呢?你想偷點懶,用些第三方的庫在你的庫中,只會讓別人編譯的時候更麻煩。
另外好多C++的庫,本身帶有一定的學習作用,你領悟之後,可以自己做個更適合自己的庫出來,反正C++開發慢,不再乎再慢這麼點時間。
方便就意味著屏蔽更多的細節。
這也許是個哲學問題。就像有的人覺得蘋果好用,是因為有的人不需要知道什麼安裝包啊,文件管理啊。但是我身邊也有人喜歡安卓,喜歡自己去管理那些文件,喜歡那種透明。這或許也像是如果你想在身邊拿什麼東西都方便,就需要身邊擺盡量少的東西。當你需要的東西越來越多,身邊的東西多起來的時候,是一定不方便的。
所以我的一個觀點是,我斗膽猜測,題主之所以認為python有很多庫用起來都比較方便,是因為題主的需求都很基礎。如果需求複雜,追求細節,對每一個用到的東西的每一個細節都要求可定製的時候,題主說到的大多數方便的python庫就並沒有題主想像中那麼方便了,甚至一些你要求的細節,庫並沒有提供給你定製的方法。
隨口說個例子(可能不是那麼嚴謹,湊活聽下):就簡單的說save一張圖片,在Python裡邊用PIL就是save這麼簡單,名字帶上後綴其他都不需要理會。那如果是我也許我會有一個疑惑,我帶了.png後綴你save的到底是png8還是 png24 png32。如果我想存成這些我想要的格式我也要去查查,有沒有相應的方法。
C++的類庫是為了讓專業的用戶寫專業的程序。這要求使用的人有比較高的水準,如果你玩圖片,你對圖片的各個方面的東西都要了解。在初始化的時候你就要寫清楚,你是否需要alpha通道,是要32位、16位還是8位色。
你的圖片是多少dpi的、圖片顯示在屏幕上的時候是多少緹。
這些東西在你需求簡單的時候根本不需要理會,你用到的也只是Python庫裡邊的show,當然你會覺得方便。當然我說這些也不是說Python就不能處理這些。當然Python也是可以的。但是當Python拿來寫專業的程序時候,題主恐怕也會覺得很多庫跟C++的庫一樣繁瑣了。
我也覺得Python的很多庫好用,但是一定是要看在哪些需求下和C++的庫比較。
題外:
C++的庫有時候在調用上沒有那麼自然,有時候也和這個有那麼一點關係一個有內存管理的語言和內存需要程序猿自己管理的語言,在類庫的方法設計上都有很大的不同。因為經常會要糾結如何不用分配更多的內存返回調用者需要的信息。那樣子可能他的調用就很奇怪,很詭異,很蹩腳,甚至不能實現。
這個例子類似字元串的split,題主看下這個。
C庫中沒有itoa以及C++中string沒有split方法的原因
這個觀點正確與否這個現在無法確定,但有一點可以確定的是每一個C++的類庫設計者,都會產生這樣的一種困擾。也不排除他們因為想不到更好的方式然後就把庫的方法設計的非常反人類。
=====================================================================深夜回答這個,寫了刪,刪了改,只是因為突然有了感觸,一兩年前跟題主一樣對這個問題有著不解。不過相信時間會讓題主對這個問題有更深刻的認識……同樣是通信工具,為啥手機有那麼多配件還有那麼多app用?為啥衛星電話就啥都沒啊,一點不人性化啊?需求不一樣,場景不一樣,目的不一樣。
1.對庫的理解不能限於標準庫。Python庫比C++多得多太違反我的認知,求一下統計數據。另外由於面向的用戶不同,你能舉出Python有的而C++沒有的東西,我也能找到C++有的而Python沒有。2.Java命名規則是什麼鬼=_=Java程序員設計的規則?3.如果我希望讓別人忽略一段靜態文本,我根本就不會讓它出現在屏幕上。如果你真的後悔說漏了嘴,現在還有機會刪掉。4.Python是很人性化。因為題主比較喜歡Python,想黑C++又不敢直說。
Boost就是在企圖解決這個問題(不看好)
因為c++要先去寫個自己的string
推薦閱讀:
※如何不使用loop循環,創建一個長度為100的數組,並且每個元素的值等於它的下標?
※菜鳥想學計算機要從哪方面開始入手?
※足球經理《Football Manager》的比賽模擬原理是什麼?
※如何玩轉github?
※GitHub 上有些什麼好玩的項目?