![](/img/trans.png)
[英]In python, is 'foo == (8 or 9)' or 'foo == 8 or foo == 9' more correct?
[英]In Python, is 'foo = x or "default"' correct?
在javascript中, foo = x || "default"
foo = x || "default"
通常被編碼。 如果x = null
, foo = "default"
。
在 python 中, foo = x or "default"
是否正確?
您編寫的代碼將產生您描述的行為,但我建議以下內容,這是三元表達式的Python 規范形式
>>> x = None
>>> foo = x if x else 'default'
>>> foo
'default'
如果你熟悉C++,你可以把上面的內容當成下面的三元表達式來閱讀
foo = x ? x : "default";
是的,它有效。 從文檔 -
表達式
x and y
首先計算x
; 如果x
為false
,則返回其值; 否則,計算y
並返回結果值。表達式
x or y
首先計算x
; 如果 x 為true
,則返回其值; 否則,計算y
並返回結果值。(請注意,無論是
and
也不or
限制值並鍵入他們返回False
和True
,而是返回最后一個變量,這有時是有用的,例如,如果s
是應該由一個默認值來代替,如果它是一個字符串為空,表達式s or 'foo'
產生所需的值。
(強調我的)
請注意,當你這樣做 -
foo = x or "default"
如果x
是None
或空字符串,在這兩種情況下, "default"
將是表達式的返回值 - x or "default"
。
它是“正確”/有效代碼(只要定義了x
),但請記住,對於任何虛假值,例如0
、 ""
、 []
或{}
, foo
將被設置為"default"
。
如果您只想在x
不是None
使用默認值,則可以使用: foo = x if x is not None else "default"
這在下面被證明。
x = 0
print(x if x is not None else "default") # prints 0
print(x or "default") # prints default
如果您正在定義一個函數,您可能只想使用默認參數。
再次證明如下:
def myfunc(x="default"):
print(x)
myfunc() # prints default
myfunc("custom value") # prints custom value
如果“正確”是指“它有效嗎?”,那么是的,它是正確的。 它工作正常,並且會按您的預期工作。 但是請注意,如果x
是False
、 0
、 None
或""
default
由於布爾邏輯在 Python 中的工作方式, foo
也將設置為default
值。
如果“正確”是指“這是正確的約定嗎?”,那么是的,我也會說它是正確的。 這是我在多個項目中看到許多開發人員使用的常見模式。 它也在 Python 文檔中作為示例給出。
如果x
已經定義,代碼工作正常,否則你會得到一個錯誤。
正確用法:
>>> x= None
>>> foo = x or "default"
>>> foo
'default'
錯誤情況:
>>> foo = x or "default"
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
foo = x or "default"
NameError: name 'x' is not defined
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.