將變量賦值給像這樣的變量被認爲是不好的樣式嗎?在python中使用「或」作業
x = "foobar" or None
y = some_variable or None
在上面的例子中,x的值爲'foobar'。
將變量賦值給像這樣的變量被認爲是不好的樣式嗎?在python中使用「或」作業
x = "foobar" or None
y = some_variable or None
在上面的例子中,x的值爲'foobar'。
不,這是常見的做法。對於比你的表情要長得多的表情,這隻會被認爲是不好的風格。
它被認爲是JavaScript中的反模式。 它不會自然地閱讀並且不能分配錯誤值。 – diginoise 2017-09-21 08:21:07
我也覺得有點不舒服,使用這種表達式。在學習Python 4ed中,它被稱爲「有點不尋常的行爲」。 後來馬克·魯茨說:
...它原來是Python中一個相當普遍的編碼範例:以 從一個固定大小的集合中在一起在或選擇一個非空的對象,只是字符串 表達。在簡單的形式,這也是 常用來指定一個默認...
事實上,他們生產的簡潔單行表達式有助於消除從代碼行的噪音。
此行爲是對的if/else三元運算符的形式爲基礎:
A = Y if X else Z
但是它可能會導致在'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
做這樣的事情的主要危險是可能性(在第二種情況下)some_variable
是假,但不是無(例如,整數0
),並且您不希望在該情況下以y
等於None。
我沒有看到任何被調用的功能只是真相測試。副作用在哪裏? – jcollado 2012-01-05 18:31:03
這不是什麼「副作用」。 – 2012-01-05 18:42:01
@jcollado:我沒有給x和y分配一個布爾值。被分配的值是第一個是True的短路項目。第一種情況是「foobar」,後者取決於some_variable的布爾值。 – TheOne 2012-01-05 19:23:40