2012-01-05 16 views
17

將變量賦值給像這樣的變量被認爲是不好的樣式嗎?在python中使用「或」作業

x = "foobar" or None 
y = some_variable or None 

在上面的例子中,x的值爲'foobar'。

+0

我沒有看到任何被調用的功能只是真相測試。副作用在哪裏? – jcollado 2012-01-05 18:31:03

+3

這不是什麼「副作用」。 – 2012-01-05 18:42:01

+0

@jcollado:我沒有給x和y分配一個布爾值。被分配的值是第一個是True的短路項目。第一種情況是「foobar」,後者取決於some_variable的布爾值。 – TheOne 2012-01-05 19:23:40

回答

13

不,這是常見的做法。對於比你的表情要長得多的表情,這隻會被認爲是不好的風格。

+1

它被認爲是JavaScript中的反模式。 它不會自然地閱讀並且不能分配錯誤值。 – diginoise 2017-09-21 08:21:07

3

我也覺得有點不舒服,使用這種表達式。在學習Python 4ed中,它被稱爲「有點不尋常的行爲」。 後來馬克·魯茨說:

...它原來是Python中一個相當普遍的編碼範例:以 從一個固定大小的集合中在一起在或選擇一個非空的對象,只是字符串 表達。在簡單的形式,這也是 常用來指定一個默認...

事實上,他們生產的簡潔單行表達式有助於消除從代碼行的噪音。
此行爲是對的if/else三元運算符的形式爲基礎:

A = Y if X else Z 
+0

但是它可能會導致在'Y = X'處重複長參數。例如:'A = my_main_dictionary.my_sub_dictionary.my_value if my_main_dictionary.my_sub_dictionary.my_value else None'或'A = my_main_dictionary.my_sub_dictionary.my_value or None' – 2017-09-18 07:19:20

9

做這樣的事情的主要危險是可能性(在第二種情況下)some_variable是假,但不是無(例如,整數0),並且您不希望在該情況下以y等於None。