簡體   English   中英

在 Python 中,'foo = x 或“默認”' 是否正確?

[英]In Python, is 'foo = x or "default"' correct?

在javascript中, foo = x || "default" foo = x || "default"通常被編碼。 如果x = nullfoo = "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 如果xfalse ,則返回其值; 否則,計算y並返回結果值。

表達式x or y首先計算x 如果 x 為true ,則返回其值; 否則,計算y並返回結果值。

(請注意,無論是and也不or限制值並鍵入他們返回FalseTrue ,而是返回最后一個變量,這有時是有用的,例如,如果s是應該由一個默認值來代替,如果它是一個字符串為空,表達式s or 'foo'產生所需的值。

(強調我的)

請注意,當你這樣做 -

foo = x or "default"

如果xNone或空字符串,在這兩種情況下, "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

如果“正確”是指“它有效嗎?”,那么是的,它是正確的。 它工作正常,並且會按您的預期工作。 但是請注意,如果xFalse0None"" 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM