如何在没有语法错误的python if语句中打破行?

时间:2013-03-05 01:05:30

标签: python

假设你在python中有一个if语句:

if not "string1" in item and not "string2" in item and not "string3" in item and not "string4" in item:
    doSomething(item)

有没有办法将if语句分解为多行?像这样:

if not "string1" in item 
    and not "string2" in item 
    and not "string3 in item 
    and not "string4" in item:

    doSomething(item)    

这可能吗?是否有一种不同的,更加“pythonic”的方式使它更具可读性?

6 个答案:

答案 0 :(得分:6)

通常,当您想要将表达式拆分为多行时,请使用括号:

if (not "string1" in item 
    and not "string2" in item 
    and not "string3" in item 
    and not "string4" in item):
    doSomething(item)

此建议直接来自Python's style guide (PEP 8)

  

包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续。通过在括号中包装表达式,可以在多行中分解长行。

但请注意,在这种情况下,您有更好的选择:

if not any(s in item for s in ("string1", "string2", "string3", "string4")):
    doSomething(item)

答案 1 :(得分:2)

是的,只需在换行符之前添加一个反斜杠:

if not "string1" in item \
    and not "string2" in item \
    and not "string3 in item \
    and not "string4" in item:

    doSomething(item)    

答案 2 :(得分:2)

反斜杠非常难看。如果您不再需要换行符,则必须删除反斜杠,而如果您放置括号则无需更改。

此外,在这种情况下,您可能需要考虑:

if not ("string1" in item 
    or "string2" in item 
    or "string3" in item 
    or "string4" in item):
    doSomething(item)

答案 3 :(得分:1)

只需将语句的所有条件放在括号内。

答案 4 :(得分:1)

您可以使用\来逃避该行的结尾。例如:

$ cat foo.py
#!/usr/bin/env python

def doSomething(item):
    print item

item =  "stringX"

if not "string1" in item \
    and not "string2" in item \
    and not "string3" in \
    item and not "string4" in item:
    doSomething(item)

$ ./foo.py 
stringX

答案 5 :(得分:0)

item = "hello"

if not "string1" in item \
    and not "string2" in item \
    and not "string3" in item \
    and not "string4" in item:

    print(item)

输出:你好

是的,反斜杠可以胜任。
此外,您的代码在string3之后缺少一个"