True and "asdf" or "qwer"
結果=> 「ASDF」如何在python的字符串布爾運算符的工作
False and "asdf" or "qwer"
結果=> 「QWER」
我不明白這些東西是如何工作的。我認爲布爾運算符字符串會使類型錯誤,但它沒有。它是否像預定義的語句,比如「a if b else c」?
True and "asdf" or "qwer"
結果=> 「ASDF」如何在python的字符串布爾運算符的工作
False and "asdf" or "qwer"
結果=> 「QWER」
我不明白這些東西是如何工作的。我認爲布爾運算符字符串會使類型錯誤,但它沒有。它是否像預定義的語句,比如「a if b else c」?
Python 和和或確定了答案後停止操作並返回最後一個掃描對象的值。他們不回真或假。我喜歡這個功能,並且一直都在使用它。
由於因爲答案現在確定當它擊中或非空字符串算作真正
True and "asdf" or absolutely_anything_here_or_following
停止計算(該或值中的一個爲真),並返回最後它檢查的東西(「asdf」)。甚至沒有進一步的操作數被檢查。
在另一方面,當
False and "asdf" or absolutely_anything_here
打或,它不知道anwser卻又如此繼續下一個操作數。只要absolute_anything_here是最後一個操作,就會確定答案,並返回最後一次掃描的內容。
and
和or
就像熟悉的布爾運算符一樣工作 - 如果兩個操作數都爲真,它們將返回true,如果其操作數中的一個操作數爲true,則返回true。
它們也短路,就像&&
和||
。
然而,在Python,這裏什麼都可以解釋爲一個布爾上下文是True
或False
,還有一個額外的事實 - 它會返回評估,以True
或在布爾環境評估,以False
第一個操作數,當它有足夠的信息來停止評估。 (這與構建並返回一個真實的布爾值True
或False
相反。)這樣做是可以的,因爲如果它是布爾評估的,它將評估它將返回的布爾值,如果不是這個事實。
因此(注意""
被評估以False
在布爾上下文):在python
>>> "" and "a"
''
>>> "a" and "b"
'b'
>>> "a" and ""
''
>>>
>>> "" or ""
''
>>> "a" or ""
'a'
>>> "" or "a"
'a'
>>> "a" or "b"
'a'
>>> "" or False
False
>>> "" or True
True
>>> False and ""
False
對象視爲真的假(如, '',無)
的布爾的結果結果依賴於可以確定結果的最後一個值。
打印 'AA' 和True
真
'AA' 是真實的,但不能確定的結果,所以結果輪到真
而
print True and 'aa'
'aa'
但運營商還是從運營商不同,看到
print None and True
無
第一個無被認爲是假,它可以決定最後的結果, 所以其打印「無」
而
print False or 'bb'
'BB'
因爲第一個False不能確定最終結果!
Python的條件運算符之前:
>>> age=20
>>> 'legal' if age>=21 else 'not legal'
'not legal'
曾經有「貨物代碼」作爲工作基於索引的元組周圍:
>>> ('not legal','legal')[age>=21]
'not legal'
>>> age=22
>>> ('not legal','legal')[age>=21]
'legal'
可以拆卸,你張貼的兩個備選方案看看底下發生了什麼:
>>> import dis
>>> def f():
... x=True and "asdf" or "qwer"
... y=False and "asdf" or "qwer"
...
>>> dis.dis(f)
2 0 LOAD_GLOBAL 0 (True)
3 POP_JUMP_IF_FALSE 12
6 LOAD_CONST 1 ('asdf')
9 JUMP_IF_TRUE_OR_POP 15
>> 12 LOAD_CONST 2 ('qwer')
>> 15 STORE_FAST 0 (x)
3 18 LOAD_GLOBAL 1 (False)
21 POP_JUMP_IF_FALSE 30
24 LOAD_CONST 1 ('asdf')
27 JUMP_IF_TRUE_OR_POP 33
>> 30 LOAD_CONST 2 ('qwer')
>> 33 STORE_FAST 1 (y)
36 LOAD_CONST 0 (None)
39 RETURN_VALUE
你可以看到你的值你會看到你所看到的價值。你也可以看看boolean operators的短路行爲,看看這是記錄的行爲。
第一個例子
Python掃描並從左向右評估。
在您的第一示例
True and "asdf" or "qwer"
評估爲
"asdf" or "qwer"
是,由於非空字符串爲True,Python的短路(忽略第二個操作數),並返回第操作數"asdf"
。不管x
的值如何,請記住True or x
將返回True
。
第二個例子
False and "asdf" or "qwer"
這個計算結果爲
False or "qwer"
這次我們做的第一個操作數不短路(我們沒有足夠的信息尚未),並且Python需要檢查第二個操作數qwer
,該值在布爾連續值中計算爲True
分機(記住它不是空的),並返回它。