21

次のようなifステートメントがあります。

def is_valid(self):
    if (self.expires is None or datetime.now() < self.expires)
    and (self.remains is None or self.remains > 0):
        return True
    return False

この式を入力すると、Vimはandlineと同じインデントを持つ新しい行に自動的に移動しifます。より多くのインデントの組み合わせを試しますが、検証すると常に無効な構文と表示されます。もしそうなら、どのように長く構築するのですか?

4

3 に答える 3

40

条件全体の周りにブラケットのレベルを追加します。これにより、必要に応じて改行を挿入できます。

if (1+1==2
  and 2 < 5 < 7
  and 2 != 3):
    print 'yay'

実際に使用するスペースの数に関しては、Pythonスタイルガイドは何も義務付けていませんが、いくつかのアイデアを提供しています。

# No extra indentation.
if (this_is_one_thing and
    that_is_another_thing):
    do_something()

# Add a comment, which will provide some distinction in editors
# supporting syntax highlighting.
if (this_is_one_thing and
    that_is_another_thing):
    # Since both conditions are true, we can frobnicate.
    do_something()

# Add some extra indentation on the conditional continuation line.
if (this_is_one_thing
        and that_is_another_thing):
    do_something()
于 2012-07-30T13:57:28.833 に答える
3

角かっこ内に改行を入れます if ((....) and (...)):

于 2012-07-30T13:57:58.330 に答える
3

テストを反転して、テストのサブセットでFalseを返すことができます。

def is_valid(self):
    if self.expires is not None and datetime.now() >= self.expires:
        return False
    if self.remains is not None and self.remains <= 0:
        return False
    return True

このようにして、テストの長い行を分割し、全体をより読みやすくすることができます。

はい、ブールテストの前後に追加の括弧を使用して、テストで改行できるようにすることができますが、複数の行にまたがる必要がある場合、読みやすさが大幅に低下します。

于 2012-07-30T14:04:20.467 に答える