3

Python で 100 行のコードを書き、ループ ステートメントをどこかに追加するのを忘れたらどうしますか?

つまり、while ステートメントをどこかに追加すると、その下のすべての行をインデントする必要があります。中括弧を付けてそれで済むわけではありません。すべての行に移動し、タブ/スペースを追加します。ネストされた loop/if/then ステートメントを既存のコードに追加するとどうなるでしょうか?

ショートカットがありませんか?

4

5 に答える 5

11

すべての本格的なエディターまたは IDE は、複数の行を選択してタブを押してインデントするか、Shift-Tab を押してそのすべての行をインデント解除するオプションをサポートしていると思います。

于 2010-10-16T09:09:12.143 に答える
3

標準の Python IDE である IDLE でコードを選択し、「フォーマット」に進むと、インデント領域、デデント領域などを選択できます。

于 2010-10-16T09:21:05.540 に答える
1

編集fileinput:の「偏心」に対応するために書き直しました*

def indent_code(filename, startline, endline):
    from fileinput import input
    from itertools import izip, count

    all_remaining = count()
    def print_lines(lines, prefix='', range=all_remaining):
        for _, line in izip(range, lines):
            print prefix + line,

    lines = input(filename, inplace=1)
    print_lines(lines, range=xrange(1, startline))  # 1-based line numbers
    print_lines(lines, '    ', xrange(startline, endline + 1)) # inclusive
    print_lines(lines)

def main():
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('filename')
    parser.add_argument('startline', type=int)
    parser.add_argument('endline', type=int)
    ns = parser.parse_args()
    indent_code(ns.filename, ns.startline, ns.endline)

if __name__ == '__main__':
    main()

まあ、それか>}.

*: 私はもともとこれをstdout.writelinesと のジェネレーター式の簡潔な組み合わせを使って書きました。残念ながら、そのコードは機能しませんでした。によって返される反復子は、そのメソッドfileinput.input()を呼び出すまで、実際にはファイルを開きません。同時にnext、大ざっぱな出力リダイレクト マジックを実行します。sys.stdoutこれはsys.stdout.writelines、イテレータ、呼び出し、および出力を呼び出して渡すと、「現在」処理されているファイルにfileinput.input再マップされたものではなく、元の標準出力に送られることを意味します。fileinputそのため、ファイルの内容を置き換えるはずの行が代わりに端末に出力されることになります。

nextを呼び出す前に fileinput イテレータを呼び出すことでこの問題を回避できますが、これにより別の問題が発生します。入力ファイルの最後に到達すると、 内で呼び出されたときにイテレータのメソッドstdout.writelinesからそのハンドルが閉じられます。Python 2.6 では、イテレータから次の値を取得した後、( を実装する C コードで) ファイルがまだ開いているかどうか、およびファイル ハンドルがゼロでないかどうかを確認するチェックが行われないため、このセグメンテーション違反が発生します。2.7 未満では例外がスローされるだけなので、この戦略はそこで機能する可能性があります。nextfile.writelineswritelines

上記のコードは、実際には正しくテストします。

于 2010-10-16T12:22:11.840 に答える
1

再インデントするには、エディター コマンドを使用する必要があります。

心に留めておいてください:美しいことは醜いことよりも優れています.

...そして「The Zen of Python, by Tim Peters」の残りの部分

# python -c "import this"
于 2010-10-16T09:15:01.503 に答える
0
  • textmate (そしておそらく e?): 選択してから、apple-]
  • bbedit: 選択してから apple-]
  • emacs: Mx 'indent-region' を選択してから
  • bpython: わかりません。bpython では自動インデントがとても簡単です。それを壊すには作業が必要です
  • xcode: xcode で python を実行しないでください

一般的に、私が知る必要があるのはそれだけです。また、インデントが不十分なブロックの上または下にブレースを叩くのは簡単ですが、1日ほど見つめていないと、1週間後に混乱するだけです. 皆さん。

于 2010-10-16T11:18:48.440 に答える