2016-12-02 116 views
1

是否有任何Python化或編寫如下if聲明緊湊的方式:簡化if語句蟒蛇

if head is None and tail is None: 
    print("Test") 

喜歡的東西:

if (head and tail) is None: 
+0

不,你就是這麼寫的。如果沒有有效但是錯誤的值(例如''''),Martijn的建議就足夠了。 – jonrsharpe

+0

如果由於某些其他原因而不值得假冒值:'如果不是頭部而不是尾部:' –

+1

頭部或尾部可能會承擔任何其他虛假值嗎? –

回答

4

如果同時headtail是自定義類實例(如Node()或類似的)沒有長度或布爾值,那麼只需使用:

if not (head or tail): 

如果以太headtail可能是具有false-y值(False,數字0,空容器等)的None以外的對象,則這將不起作用。

否則,你堅持明確的測試。布爾邏輯中沒有「英語語法」快捷鍵。

+0

請注意,它會檢查值是不是truthy(不只是'None'值) –

+2

如果不是(頭部或尾部)'(或'如果不是頭部而不是尾巴') –

+0

@KirillBulygin:今天我需要更多的咖啡因。 –

0

順便說一句,像(head and tail) is None這樣的描述在編程中是不允許的,這是爲什麼(a and b) = 0在數學中是不允許的(爲了強制每個語句只有一個,規範的形式;「應該有一個明顯的方法來做每個東西「也是explicit Python座右銘)。

+1

你是什麼意思? '(頭部和尾部)是None'在Python中是完全有效的,但它並沒有達到人們所期望的效果。 :) –

+0

我的意思是'(頭部和尾部)是'None',其意圖與'(a和b)= 0'相同。 –

2
if head is None and tail is None: 
    print("Test") 

是清晰和高效的。如果任一headtail都不可能從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 
1

你的代碼就像Pythonic一樣。

當談到這些事情時,The Zen of Python是有幫助的,它記住有時直截了當是最好的選擇。

Beautiful is better than ugly. 
Explicit is better than implicit. 
Simple is better than complex. 
etc...