目前編譯器(實際是翻譯器)項目已經完成,對python的使用有了更深的感受。
除了之前說的以外,以下是補充幾點(完全是個人看法)。
首先是python相對路徑讀取設定檔和寫檔案問題,相對路徑在python中的使用跟java和C++不同。它是在那個位置運行py指令碼,就把當前路徑作為根路徑。如:當在目錄A下運行一個py指令碼,那麼目錄A就是一個根路徑了,那麼所謂的相對是以這個路徑作為參考;當在目錄B下運行一個py指令碼,那麼目錄B就是一個跟路徑了。
這時就會出現在整合模組時,最終的啟動py指令碼的目錄位置是不可確定性,那會出現很多設定檔讀取不到,而寫檔案寫錯目錄的情況。而且python虛擬機器本身來講,載入py檔案和讀取設定檔(或其他檔案)方式並不相同。所以解決的方式如下:
使用python內部屬性__file__,表示當前py指令碼所屬的路徑是一個絕對路徑。
並用os.path.split(os.path.realpath(__file__))[0],來得到當前使用的路徑。
其次是python中目錄命名、py指令碼命名和py指令碼內容的命名。如:在目錄C下,有一個C.py指令檔,C.py指令碼內容中有一個類C這樣。
在有些情境的調用中,會導致命名衝突,減少命名出現這樣的情況。
接著python使用確實很靈活,代碼量少,如python序列化技術,也就兩三行搞定,而沒有像java那麼繁瑣的要實現什麼介面這樣的限制。
而且Python開放源碼,可以看到底層很多C/C++的代碼,可以很快加深對python原理的理解(參考《Python源碼剖析-深度探索動態語言核心技術》,目前本人也在研究當中,其中的C/C++的知識可參考Thinking in C++),但是在實際的開發過程中,python項目的文檔必須進行詳細的說明,不然代碼後期的維護量很大,也就是之前所說的變數沒宣告類型,類又可以動態建立其成員變數,許可權等。都是後期維護難度大的因素。
還有就是目前從網上的資料顯示,python可以打包成exe,但是沒有看到能打包成其他類型的方式,如dll(畢竟python也是C/C++寫出來的)這樣。個人覺得打包的形式還是比較單一的。
最後是python也有類似於函數指標的影子在裡面,如下所示:
定義個方法
def fun(str1,str2):
print str1,str2
運行時如下:
f=fun
f('a','b')
列印出"a b"的字串。
但是在java中就沒有這樣的形式出現。