正如其他人所說,表達a, b in s
創建一個元組這始終是真實的,非空的元組是truthy,即它在布爾上下文中計算爲True
。請注意,逗號會創建元組,而不是括號,儘管在某些上下文中需要使用括號以避免歧義,例如,當將元組文字作爲單個函數參數傳遞時。
順便說一句,Python中的if
語句的條件表達式不需要使用括號。他們不會傷害,但通常的風格習慣是將它們省略爲不必要的混亂。
注意if a and b in s:
不不測試,如果雙方a
和b
是集s
的元素。要執行測試,您應該使用set.issuperset
方法:
if s.issuperset((a, b)):
請注意,我們這裏需要額外的括號,因爲我們傳遞的元組a, b
作爲一個參數。
該聲明也可以使用的.issuperset
操作形式寫出:
if s >= set((a, b)):
但使用這種形式,當兩個操作數必須是集(或frozensets),而完整的方法將接受任何可迭代的其他 arg。
但回到你的代碼...表達
a and b in s
相當於
a and (b in s)
如果a
是假肥胖型(即,False
,0或空集)的表達式求a
和and
表達的第二部分被忽略。否則(當a
是真值ish時)and
表達式的第二部分被評估並且成爲結果。
換句話說,如果a == 0
然後a and b in s
導致0,但如果是a
任何其它數量然後a and b in s
將導致True
如果b
是在s
,而且會導致在False
如果b
不在s
。請參閱我對Assigning string with boolean expression的回答以獲取更多信息(包含衆多示例)。
我想你已經創建了一個元組。它由'a'和'b in s'的結果組成,並且您正在測試元組的真實性。 –