是否有任何Python化或編寫如下if
聲明緊湊的方式:簡化if語句蟒蛇
if head is None and tail is None:
print("Test")
喜歡的東西:
if (head and tail) is None:
是否有任何Python化或編寫如下if
聲明緊湊的方式:簡化if語句蟒蛇
if head is None and tail is None:
print("Test")
喜歡的東西:
if (head and tail) is None:
如果同時head
和tail
是自定義類實例(如Node()
或類似的)沒有長度或布爾值,那麼只需使用:
if not (head or tail):
如果以太head
或tail
可能是具有false-y值(False
,數字0,空容器等)的None
以外的對象,則這將不起作用。
否則,你堅持明確的測試。布爾邏輯中沒有「英語語法」快捷鍵。
請注意,它會檢查值是不是truthy(不只是'None'值) –
如果不是(頭部或尾部)'(或'如果不是頭部而不是尾巴') –
@KirillBulygin:今天我需要更多的咖啡因。 –
順便說一句,像(head and tail) is None
這樣的描述在編程中是不允許的,這是爲什麼(a and b) = 0
在數學中是不允許的(爲了強制每個語句只有一個,規範的形式;「應該有一個明顯的方法來做每個東西「也是explicit Python座右銘)。
你是什麼意思? '(頭部和尾部)是None'在Python中是完全有效的,但它並沒有達到人們所期望的效果。 :) –
我的意思是'(頭部和尾部)是'None',其意圖與'(a和b)= 0'相同。 –
if head is None and tail is None:
print("Test")
是清晰和高效的。如果任一head
或tail
都不可能從None
起假十歲上下值之外,但你只想時,他們都None
要打印,然後你寫的是較安全
if not (head or tail):
print("Test")
一個更緊湊(不是你的代碼),它仍然是既安全&高效是
if head is None is tail:
print("Test")
head is None is tail
實際上相當於(head is None) and (None is tail)
。但是我認爲它比原始版本的可讀性要差一些。
BTW,(head and tail) is None
是有效的Python語法,但它是不推薦,因爲它沒有做什麼,你可能首先想到它:
from itertools import product
print('head, tail, head and tail, result')
for head, tail in product((None, 0, 1), repeat=2):
a = head and tail
print('{!s:>4} {!s:>4} {!s:>4} {!s:>5}'.format(head, tail, a, a is None))
輸出
head, tail, head and tail, result
None None None True
None 0 None True
None 1 None True
0 None 0 False
0 0 0 False
0 1 0 False
1 None None True
1 0 0 False
1 1 1 False
你的代碼就像Pythonic一樣。
當談到這些事情時,The Zen of Python是有幫助的,它記住有時直截了當是最好的選擇。
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
etc...
不,你就是這麼寫的。如果沒有有效但是錯誤的值(例如''''),Martijn的建議就足夠了。 – jonrsharpe
如果由於某些其他原因而不值得假冒值:'如果不是頭部而不是尾部:' –
頭部或尾部可能會承擔任何其他虛假值嗎? –