1

假设您在 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”的方式来使它更具可读性?

4

6 回答 6

7

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

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

此建议直接来自Python 的样式指南 (PEP 8)

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

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

if not any(s in item for s in ("string1", "string2", "string3", "string4")):
    doSomething(item)
于 2013-03-05T01:08:43.510 回答
2

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

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

    doSomething(item)    
于 2013-03-05T01:07:35.010 回答
2

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

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

if not ("string1" in item 
    or "string2" in item 
    or "string3" in item 
    or "string4" in item):
    doSomething(item)
于 2013-03-05T02:10:44.187 回答
1

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

于 2013-03-05T01:08:47.807 回答
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
于 2013-03-05T01:09:29.983 回答
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 之后缺少一个。

于 2013-03-05T01:07:42.133 回答