Python中一些糟糕的語法!你遇到過嗎?還知道那些?
阿新 • • 發佈:2019-01-05
Python是一門語法優雅,功能強大,開發效率高,應用領域廣泛的解釋性語言。
其有非常多的優點,但是也並不是完美的,除了大家都知道的執行速度不夠快,Python2和Python3的相容問題,以及GIL鎖,在其語法上也有一些特點(是否是缺點見仁見智啦):
1. 使用可變物件作為函式預設值
程式碼如下:
在Python中,字典,集合,列表等等物件不適合作為函式預設值。因為這個預設值在函式建立時就會生成, 每次呼叫都呼叫了這個物件的”快取”。
2. bool是int的子類 我們可以用以下程式碼來測試:
我們在來看看bool的型別:
3.‘==’ 和 is 的區別 ”Is”是判斷兩個物件是否是同一個物件, “==“是判斷兩個物件的值,但我們通過以下程式碼來測試:
上邊我們四段程式碼,我們可以想象出python的記憶體管理,快取了-5——256的物件。 最後一段,因為float(‘nan’)的型別就是nan,“==”代表值相同,而nan並不是一個值nan和nan的比較關係只能是nan != nan,就如同我們說,負無窮不可能等於負無窮一樣。
4. lambda在閉包中會儲存區域性變數
程式碼如下:
原因是當賦值給myList,lambda表示式就執行了迴圈,直到 i =4結束,i被保留。
5.列表取值超出索引數
我們可以這樣寫一段程式碼:
但如果我們這樣寫:
6. 縮排的問題見仁見智。
如果考慮“在網路上傳播程式碼片段”這個問題,強制的換行和縮排可能是一個障礙。
換句話說,python程式碼無法像Lua、JS那樣壓縮到一行,在複製貼上、分享給別人時可能會很麻煩。
你還遇到過哪些?歡迎評論分享!