我不懂行的含義:使用「與」和「或」運算符與Python字符串
parameter and (" " + parameter) or ""
其中參數是字符串
爲什麼一個要使用and
和or
運算符一般用python字符串嗎?
我不懂行的含義:使用「與」和「或」運算符與Python字符串
parameter and (" " + parameter) or ""
其中參數是字符串
爲什麼一個要使用and
和or
運算符一般用python字符串嗎?
假設你正在使用的parameter
價值,但如果該值是說None
,那麼你寧願找一個空字符串""
代替None
。一般你會做什麼?
if parameter:
# use parameter (well your expression using `" " + parameter` in this case
else:
# use ""
這就是表達式在做什麼。首先,你應該明白什麼and
和or
運營商的作用:
a and b
回報b
如果是True
,否則返回a
。a or b
返回a
如果a是True
,否則返回b
。所以,你的表達:
parameter and (" " + parameter) or ""
這實際上相當於:
parameter - A1
被評估爲:
(parameter and (" " + parameter)) or ""
# A1 A2 B
# A or B
如何,如果表達式求值True
:
result = (True and " " + parameter) or ""
result = (" " + parameter) or ""
result = " " + parameter
parameter - A1
是None
:
result = (None and " " + parameter) or ""
result = None or ""
result = ""
作爲一般建議,它的更好和更具有可讀性使用A if C else B
形式表達爲條件表達式。所以,你應該更好地使用:
" " + parameter if parameter else ""
而不是給定的表達式。請參閱PEP 308 - Conditional Expression以瞭解if-else
表達式背後的動機。
它檢查parameter
是否有值。如果它確實佔據了空間。如果不是,則返回空字符串。
$ python
Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> foo = 'bar'
>>> foo and (" " + foo) or ""
' bar'
正確,但你可能想解釋它是如何工作的。 –
Python中的空字符串相當於一個False
布爾值,與空列表相同。你所介紹的這一行是Python版本的三元運算符(如下面的註釋中所述,現在是一個過時的構造,如Python now has a real ternary operator)。它是基於三個規則:
a and b
如果a
是False
然後b
將不會被計算a or b
如果a
是True
然後b
將不會被計算如果parameter
的計算結果爲True
and
子句的第二部分將得到評估:(" " + parameter)
。所以如果它不是一個空字符串,它會爲parameter
增加前導空間。 or
子句的第二部分將不會被評估,因爲您已經可以知道整個表達式是True
(True
或任何東西總是True
)。
如果parameter
是False
(在這種情況下空字符串)and
條款的第二部分將不會得到評估,因爲你已經可以告訴它是False
(False
,任何事情總是False
)。因此or
子句的第二部分被評估返回一個空字符串。
你可以在一個更詳細的方式把它寫:
if parameter:
return " " + parameter
else:
return ""
考慮這個TTL。然後,它只是堵塞在不同的場景,看看會發生什麼:)
注意and
和or
評估,以使他們「成功」或「失敗」的第一個值 - 這不一定是真或假的!
a b a or b a and b
-- -- ------ -------
T T a (T) b (T)
T F a (T) b (F)
F T b (T) a (F)
F F b (F) a (F)
T和F分別表示「Truth-y」和「False-y」值。這種表達式鏈接工作,因爲操作員不需要返回True或False - 它將是值a
或b
。
Python將空字符串視爲布爾值爲「false」,將非空字符串視爲布爾值爲「true」。
因此,表達式只有兩種可能的結果,即空字符串和非空字符串。
要注意的第二件事是返回「或」和「和」運算符的值。 Python不會返回true或false值,對於字符串和/或運算符,它會返回其中一個字符串(考慮它們具有true或false的值)。 Python使用懶惰的方法:
對於「和」運算符,如果left值爲true,則檢查右值並返回。如果剩餘值爲假,則返回
對於「或」運算符,如果第一個值爲true,則返回它。否則,如果第二個值是假的,那麼第二個值返回
parameter = 'test'
print(parameter and (" " + parameter) or "")
輸出中:測試
parameter = ''
print(parameter and (" " + parameter) or "")
輸出:(空字符串)
與所有的很好的答案,我發現這些報表幫助我記得這個更好,適合我的大腦如何工作(並希望爲更多的人):
「和」返回第一個False項目(例如None,「」,[],(),{},0)或最後一個項目(如果沒有沒有虛假找到)
「或」返回第一個真正的項目或最後一個項目(例如,沒有真正找到)
總之他們都返回決定語句的結果中的第一項。 (在最壞的情況下,該序列中的最後一項)
注意這一規則也適用於鏈的所有「和」或全部「或」語句
這是'」「+參數在參數別人‘’'帶有額外的默默無聞。 – zch
@ Smac89:它確實有道理,但如此我的人會認爲這是不刺激的。 –