2011-03-18 74 views
8

我想知道是否有一種方法做以下更緊湊的風格:Python多重比較風格?

if (text == "Text1" or text=="Text2" or text=="Text3" or text=="Text4"): 
    do_something() 

問題是我已經不僅僅是4比較多的if語句,它的開始看起來比較長,曖昧,而且很醜。有任何想法嗎?

回答

16

如何:

if text in ('Text1', 'Text2', 'Text3', 'Text4'): 
    do_something() 

我總是發現,古樸典雅。

+0

通常的Python風格不會在圓括號周圍放置空格。 @布倫特說得對,但由於某種原因將其刪除。 – 2011-03-18 15:27:47

+0

正是我在找什麼,謝謝你,我的代碼現在看起來好多了:) – Symon 2011-03-18 15:46:50

+0

@GlennMaynard:感謝pep-8提醒。就我個人而言,我發現在parens內部有空間可以更清晰地看到,但我應該記住要把它們留在例子中。 – 2011-03-18 22:21:14

7

「if if text in answer」是好的,但如果您的文本字符串符合模式,您可能還會考慮re(正則表達式)包。例如,從字面上看,「文本」後跟一個數字就是一個簡單的正則表達式。

下面是一個適用於「文本」後跟數字的示例。 \ Z匹配字符串的結尾,\ d一個數字。

if re.match('Text\d\Z', text): 
    do_something() 
+0

我已經upvoted這是一個例子已經提供... – martineau 2011-03-18 17:50:35

+0

我編輯了一個例子。 – dsmccoy 2011-03-18 19:52:06

+0

現在更喜歡它了。 ;-)(實際上你不需要'!= None'部分,順便說一下) – martineau 2011-03-18 22:31:28