強制使用者遵守格式有什么壞處?
python的整個系統,我其實有非常多的不滿。但是用任何一門語言都是取舍問題,如果有一門語言,庫夠多,已讀,易用,性能高,我毫不猶豫立刻轉過去。python的強處在于龐大的庫,還有非常好的易讀和易用性。但是相比來說,性能一直是個問題。python的實現性能大約和C相差五倍上下。如果是大規模計算問題,大約能差10倍以上。當然,我們可以寫C擴展,但是這就不是使用python了。我們也可以說,很多時候我們不需要這么快的速度。這是個事實,但是不改變python性能差的事實。 python不但性能差,還有GIL這個玩意。以至于我現在對高并發計算都采取多進程的模式。多進程模式的通訊效率肯定比多線程低,而且麻煩。另外,python在底層設計上,也表現出很強的實用主義傾向。這是比較外交術語的詞匯,更加直白的說法應當是,混亂,不知所謂。在閉包設計上采用free variable設計,而不是lisp中的environs設計。區別?你試試看在外層閉包中from lib import *。由于引入不定個數名稱,free variable無法處理。類似的問題還有LEGB規則,新手往往要花很長時間研究這個例子究竟是怎么錯的: a = 1 def f(): print a a = 2 我勒個去,這種反直觀反人類的事情都有,還敢說自己易讀。還有坑爹的元編程,這東西根本是坑爹中的坑爹貨。如果你用過多重繼承,大概就知道python的整個OO系統看起來根本是大型的仿真,到處都是亂糟糟的。C++怎么解決多重繼承的?你最好別用(真心說,這可比python更加坑爹)。java怎么解決多重繼承的,只能繼承Interface。其實這是變相的變成了Interface-Implement模式。python怎么解決的?MRO!為什麼一個類加個__metaclass__就會改變性質啊,為什麼一個類去生成另一個類的寫法是――我基本不記得了,反正
web.py
里面有用到,需要的話去炒栗子吧。為什麼方法要隱藏居然要改名字加__啊。你到底是在做OO還是在看起來像OO的東西上狂打補丁啊魂淡。lambda表達式弱智。我和人討論過,lambda是否是圖靈完備的。結論還是完備的,不過需要借助Y combinator。何必呢?由于強調lambda的快速特性,因此將lambda強制在一行以內(沒有結束標記),導致python其實是沒有匿名函數的。一個callback數組寫的難過死。語法糖太多了點,當然,這是純粹的個人感覺。語法糖是把雙刃劍,用的好,可以簡化編寫和閱讀,但是太多,往往容易引入語法混亂和額外的約束。另外,語言的自構建特性混亂。雖說不是每門語言都強調自構建特性,但是通常而言,都是使用C實現一個內核,由內核實現一些基礎操作。再由基礎操作實現更復雜的操作。每層的邊界都是比較清晰的。誰來告訴我,python中有多少庫在移植時是由純python實現的?庫的相互依賴層級是?python的沙盒化也是個問題,如果沙盒做的夠好,我完全可以把python作為一個客戶級別的平臺。用C寫一個很簡單的類似瀏覽器的東西,下載一個URL的python包回去運行(或者僅僅檢查更新)。從而保證本地效果/跨平臺/安全性。現在?一個都保證不了。我連把一個python包轉移到另一臺同構設備上都很麻煩(如果兩者不是嚴格匹配,例如系統差異,系統版本差異)無論是web開發還是移動終端開發都必須走傳統模式。