2011-03-18 69 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