對Python shell的一些思考

2021-07-11 01:53:46 字數 2001 閱讀 9802

對python、shell的一些思考

就兩次指令碼處理的編碼練習而言,我感覺如果使用python去寫指令碼來處理日常事務的話,相對於shell是一件比較麻煩的事情,因為我可以使用shell在花費更少的時間內,比較熟練地使用awk、sed和grep這些常用的命令在非常簡短的指令碼語句內,完成python一大段**所能夠完成的功能。

前兩天,讀到了一篇文章「又拍網架構-又乙個用到python的**」,**:上面寫到:又拍網的伺服器端開發語言主要是php和python,其中php用於編寫web邏輯,而python則主要用於開發內部服務和後台任務。一般情況下,**架構的開發語言可以用下圖所描述:

綜合網路及書籍對於python的各種評價來看,python應用是非常的廣泛,而且在未來也是非常被看好的語言。但這並不代表python是適用於任何場合的,如對於乙個sa(系統分析員)而言,平時管理系統用shell指令碼肯定是最簡單的,如果純粹的系統管理,應該很少有問題是shell解決不了的,使用shell來處理也會顯得更加地方便和快捷,舉個例子:把所有開頭是#的行都找出來,用shell只需要乙個grep命令,而對於python則需要open(檔案).readlines(),然後還需要讀入正規表示式模組,一行一行地讀入文字,再分析該行是否滿足條件,需要一大堆的邏輯**才能完成shell乙個命令的功能。

當然,任何一種語言必定有它的適用範圍,雖然在開發效率方面python要低於shell要高於shell,但python相對於shell的優點,依照我最近的學習,感覺可以概括為如下方面:

(1)python不需要記憶太多的命令,語法簡單,有c基礎的人學起來非常容易上手,易於使用。而shell要學的命令太多了,但常用的命令不是太多。

(2)python可移植性好,它的標準是統一的,不會出現因為平台的不同執行結果不同,但shell的命令在各個平台上還有些不一樣。

(3)python要更加強大,shell是一種命令語言,同時也可以看成是乙個命令直譯器,用於接收諸如awk、sed的命令呼叫等完成相關的功能。而python則是一種程式語言,python提供給程式設計師更大的自由度和靈活性,以完成shell所不能完成或者難於完成的編碼任務,如實現物件導向的模組化設計、操作伺服器資料庫等等。

(4)python支援物件導向、支援可擴充套件性和可嵌入性,同時提供了功能豐富的庫

(5)效能方面:很明顯地,python的執行效率要高於shell,有乙個很充分的理由就是shell本身的各種程序間ipc通訊要造成相當大的開銷。而python底層是用c實現的,其效能可以接近於c,但具體相同功能的python**量卻要比c短上很多倍!因此,按照效能排序:c > python > shell,按照開發效率排序:shell > python > c。

其實對於各種程式語言的發展,如果純以語言的執行效率而言,最快的肯定是彙編了,為什麼有了彙編之後還會有c?而有了c之後還會有perl、python呢?這應該是許許多多天才般的程式語言設計者們,從開始都現在一直在不斷地追求的,試圖在語言的執行效能與易用性上尋找乙個平衡點。而語言本身只是工具而已,而這項工具好不好用,除了很大程度上取決於語言本身的設計之外,另一方面則是與語言使用者本身的熟練度、能力和水平密切相關。

程式語言其誕生的意義在於解決問題,驗證想法,屬於對問題求解的實踐過程,如研究資料探勘的,主要關注的是資料的分布、概率模型等數學演算法問題,用哪種語言來驗證方案的可行性並不非常重要,對於語言本身的唯一的要求可能就是要好用,最好不需要有太多複雜的語法,通過簡單地學習就可以上手並能輕鬆地寫出程式,二是要執行效率可以接受,不需要最快,但也不能太慢。

而在執行效率與易用性上,指令碼語言給了使用者乙個很好的平衡點,而這一點,恰恰是指令碼語言的最重要的意義。我們可以通過指令碼方便快捷地編寫**,甚至在某些情況下,這此指令碼**執行的效率跟c是相差無幾的。

春節過年,走親訪友是常事,就沒有用實驗去驗證比較一下shell、python和c效能的差異。不過我找到乙個非常有意思的**:

這個站點對比了所有主流語言的執行的效能包括[時間、記憶體、**量],如下圖所示的是:在執行多個有代表性的測試用例情況下,python的效能除以c語言的效能得到的資料圖,可以看出c在[時間、記憶體]上的開銷要低於python,但在[**量]上python要少於c。

對synchronized this 的一些理解

一 當兩個併發執行緒訪問同乙個物件object中的這個synchronized this 同步 塊時,乙個時間內只能有乙個執行緒得到執行。另乙個執行緒必須等待當前執行緒執行完這個 塊以後才能執行該 塊。二 然而,當乙個執行緒訪問object的乙個synchronized this 同步 塊時,另乙個...

對synchronized this 的一些理解

一 當兩個併發執行緒訪問同乙個物件object中的這個synchronized this 同步 塊時,乙個時間內只能有乙個執行緒得到執行。另乙個執行緒必須等待當前執行緒執行完這個 塊以後才能執行該 塊。二 然而,當乙個執行緒訪問object的乙個synchronized this 同步 塊時,另乙個...

對synchronized this 的一些理解

對synchronized this 的一些理解 一 當兩個併發執行緒訪問同乙個物件object中的這個synchronized this 同步 塊時,乙個時間內只能有乙個執行緒得到執行。另乙個執行緒必須等待當前執行緒執行完這個 塊以後才能執行該 塊。二 然而,當乙個執行緒訪問object的乙個sy...