天天看點

python優點和缺點驚呆沒有,這是怎麼做到的?? 也許你該看看描述符的概念

優點:

文法簡潔優美, 功能強大, 标準庫跟第三方庫灰常強大, 應用領域非常廣: vinta/awesome-python · GitHub(跟PHP形成宣明對比!)語言方面, 舉幾個例子:一切都是對象!!!類(class本身)/函數/類方法是callable的對象因為是對象,是以你當然可以傳來傳去啦.

歡迎加群 四 99 7 五四 6 14 學習交流,驗證cs

比如:class A:

def init(self):

print “init A”

def run(self):

print “run A”

threading.Thread(target=A).start() #: 在另一個線程執行A()

a = A()

threading.Thread(target=a.run).start() #: 在另一個線程執行a.run() …

驚呆沒有,這是怎麼做到的?? 也許你該看看描述符的概念

List表達式(其他好多語言也有,但是我最喜歡python的寫法):把”1023”變成 [1, 2, 3][ int(x) for x in “1023” if x != “0” ]

(目前你可以用Lisp風格的: map(int, filter(lambda x: x != “0”, “1024”)))對dict也是類似:adict = {“a”:1, “b”:2}

{k: v*2 for k, v in adict.items() }

yield關鍵字:當你需要傳回很多東西然後一個一個用的時候, 你可以一次傳回一個def xrange(n):

i = 0

while i < n:

yield i

i += 1

用法:

for i in xrange(10):

print i

裝飾器@:把something_heavy()傳回的結果緩存起來(以函數名+args為緩存的鍵值,隻緩存最近使用的10條)@functool.lru_cache(10)

def something_heavy(args):

#各種耗時操作…..

pass

運算符重載:試試numpy, 你會驚呆的, 操作向量/矩陣跟基本類型一樣友善缺點:慢目測python是最慢的腳本語言,比V8上的JS還慢不少. (研究一下描述符,你會發現python調用對象方法的開銷好大!)但是python創始人說了, 一般程式的瓶頸在于20%的代碼, 是以你可以把那20%的代碼用C重寫(而python是膠水語言,用C重寫部分代碼當然很easy啦)同時,你可以試試PyPy, 引入了JIT技術動态類型有人說: 動态類型寫時爽, 重構起來是災難(原諒我記不得原話..).對于不寫unittest, 不做代碼覆寫率測試的人來說, 動态語言當然是危險的, 拼寫錯誤都可能被隐藏, 重構?别搗亂!python創始人有話說: “如果你認為編譯器可以幫你解決所有問題,那你一定幹程式設計沒多久” (鄙人深有體會,曾經年少輕狂的我非常鄙視javascript), “不管什麼程式,都需要寫testcase, 既然要寫testcase, 那麼動态類型不是問題!”在此推薦大家兩個工具: py.test python-coverage