探尋Python語言奧秘所在
對于Python語言的奧秘我有許多要說的話,首先個人認為Python語言是一種面向對象、直譯式計算機程序設計語言,也是一種功能強大而完善的通用型語言,也是對初學者非常有益的一門語言。
我之所以放棄PHP,原因首先是語言。PHP實際上不是一種語言,而是一種巨大的插件結構,以一種高層的形式來展示低層的庫。而大部分開發者使用的語言實際上是對C功能 (curl, mysql, gd, etc.)的包裝,通常情況下它們的庫展示得很簡單。因而這導致了PHP的API不一致。
PHP語言的第二個問題是Python語言的管理問題。PHP語言實際上是由委員會來設計的,而且沒有人來制定任何共識性的標準。PEAR有自己的標準,PHP有自己的標準,這導致SPL classes更具Java風格,而PEAR卻截然不同。
從事PHP開發11年來,我認識了很多PHP領域的專家級開發者,它們對PHP也有很多看法。除了上文提到的委員會問題以及標準混亂問題之外。由于PHP的使用范圍非常廣,向后的不兼容對代碼造成了很大的破壞。還要提到的一點是PHP缺乏很多現代語言的特性。現在再來說說Python:
Python語言的創建方法幾乎與PHP的完全相反。首先,Python是由Benevolent Dictator和Guido van Rossum領導的,語言的開發由單一的人員主導,因此它的開發、管理以及長期運營會保持很好的連續性。
Guido和Python的核心開發者通過PEP創建標準,而且通過公共接口展示標準是如何創建的。而且,Guido如果想到的語言特性不夠好。也不會出現在語言層中(如沒有++運算符,而且比較符中沒有分配)。延續性的特點也延伸到了整個Python社區,所以你很難發現不同項目中的Python截然不同。
我最喜歡的Python的一個特點就是它的清晰。當打開Python中的一個文件的時候,我會清楚地知道里面大概有什么樣子的代碼,聯想到很多次我被PHP的這一點搞得焦頭爛額,我覺得這個特性非常有用。#t#
總之,Python的系統級特性非常不錯。Python另外一個很棒的特性是直白性。需要namespace(命名空間)?文件的名字就是命名空間;需要模塊?只需要用一個__init__.py文件代替;需要重命名功能?只需要new_func = old_func。
創建一個Thread 的實例,構造方法中傳入一個函數t=threading.Thread(target=_func_name,args=(參數元組)創建一個Thread 的實例。構造方法中傳入一個可調用的類對象定義一個類class ThreadFunc,類中必須重寫call__函數供線程調用t=threading.Thread(target=ThreadFunc實例)
從Thread派生出一個子類,創建子類的實例class MyThread(threading.Thread)重寫threading.Thread中的run函數供線程執行。所有上述線程創建后,都采用線程實例的start()的方法啟動,join()方法加自旋鎖。關于自旋鎖,多個線程運行時,怎樣確保所有重要線程都已經結束呢?在threading模塊中。
每個Python語言都有一個join函數,其實就是一個等待此線程鎖釋放的無限循環(也稱為自旋鎖)。當一個線程實例啟動時,顯式調用join()會使主線程被迫等待該線程的自旋鎖釋放。這種情況在順序過程的任務流程序中比較常見。
學到這里,我想,不妨做一個通用的模塊,對任意過程實現線程同步處理。比如一個下載過程,只需要傳入URL就可以了,主線程不必等待下載完成才執行其他任務,對于這樣一個特殊的過程函數,我們可以使用函數修飾功能。