2013-03-05 34 views
0

假設你有一個if語句在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

一般來說,當你想表達拆分到多個行,使用括號:

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) 
+0

是,使用Lambda表達式第二項技術? – quakkels 2013-03-05 01:10:05

+0

@quakkels:我沒有看到任何'lambda',所以沒有。 – Blender 2013-03-05 01:12:07

+0

我還沒有看過python lambdas ......但是我認爲's中的任何東西......'看起來都很像c#的'someListOfStrings.Any(s => s ==「somethingtomatch」 )' – quakkels 2013-03-05 01:14:49

2

沒錯,只需立即加入反斜槓換行前:

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

    doSomething(item)  
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後缺少一個"

1

只需將括號內聲明的所有條件。

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 
2

反斜槓非常難看。如果您不再需要換行符,則必須刪除反斜槓,而如果您將括號替換,則無需更改。

而且,在這種情況下,你可能要考慮:

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