1. 程式人生 > >Python中一些糟糕的語法!你遇到過嗎?還知道那些?

Python中一些糟糕的語法!你遇到過嗎?還知道那些?

Python是一門語法優雅,功能強大,開發效率高,應用領域廣泛的解釋性語言。

其有非常多的優點,但是也並不是完美的,除了大家都知道的執行速度不夠快,Python2和Python3的相容問題,以及GIL鎖,在其語法上也有一些特點(是否是缺點見仁見智啦):


 

1. 使用可變物件作為函式預設值

程式碼如下:

Python中一些糟糕的語法!你遇到過嗎?還知道那些?

 

在Python中,字典,集合,列表等等物件不適合作為函式預設值。因為這個預設值在函式建立時就會生成, 每次呼叫都呼叫了這個物件的”快取”。

2. bool是int的子類 我們可以用以下程式碼來測試:

Python中一些糟糕的語法!你遇到過嗎?還知道那些?

 

我們在來看看bool的型別:

Python中一些糟糕的語法!你遇到過嗎?還知道那些?

 

3.‘==’ 和 is 的區別 ”Is”是判斷兩個物件是否是同一個物件, “==“是判斷兩個物件的值,但我們通過以下程式碼來測試:

Python中一些糟糕的語法!你遇到過嗎?還知道那些?

 

上邊我們四段程式碼,我們可以想象出python的記憶體管理,快取了-5——256的物件。 最後一段,因為float(‘nan’)的型別就是nan,“==”代表值相同,而nan並不是一個值nan和nan的比較關係只能是nan != nan,就如同我們說,負無窮不可能等於負無窮一樣。

4. lambda在閉包中會儲存區域性變數

程式碼如下:

Python中一些糟糕的語法!你遇到過嗎?還知道那些?

 

原因是當賦值給myList,lambda表示式就執行了迴圈,直到 i =4結束,i被保留。

5.列表取值超出索引數

我們可以這樣寫一段程式碼:

Python中一些糟糕的語法!你遇到過嗎?還知道那些?

 

但如果我們這樣寫:

Python中一些糟糕的語法!你遇到過嗎?還知道那些?

 

6. 縮排的問題見仁見智。

如果考慮“在網路上傳播程式碼片段”這個問題,強制的換行和縮排可能是一個障礙。

換句話說,python程式碼無法像Lua、JS那樣壓縮到一行,在複製貼上、分享給別人時可能會很麻煩。

你還遇到過哪些?歡迎評論分享!

Python中一些糟糕的語法!你遇到過嗎?還知道那些?