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 
    or "string2" in item 
    or "string3" in item 
    or "string4" in item):
    doSomething(item)
于 2013-03-05T02:10:44.187 に答える
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 に答える
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 の後にコードが 1 つ欠落しています。

于 2013-03-05T01:07:42.133 に答える