2

信じられませんでしたが、Pythonコードでタブとスペースを混在させることは可能です。

if __name__ == '__main__':
    for a in range(3): # indented with 4 spaces
        print(a)       # indented with 4 spaces and one tab

この背後にある理由は何ですか?

テスト済み:

  • Python 3.3.0(CPython)
  • Python 2.7.3(CPython)

注:stackoverflowはスペースでタブを変更するようです!

4

2 に答える 2

7

これは、Pythonインデントに関する多くの神話の1つです。

Pythonが実際に行うことは、固定量ではなく、行間の相対インデントを調べることです。

  • 行間でインデントが増えると、それはブロックの開始と見なされ、新しいインデントレベルがスタックにプッシュされます。
  • インデントが減少すると、一致するレベルが見つかるまでインデントレベルスタックをポップし、各ポップのブロックを閉じます

ブロックのスコープ内の各レベルで一貫している限り、タブ、スペース、または混合を使用しているかどうかは関係ありません。

例:以下は有効なファイルです([]を使用してスペースを表し、[t]を使用してタブを表します)

if True:
[ ][ ][ ][ ]print ("Four spaces")

if True:
[t]print ("Tab")
[t]if True:
[t][ ][ ][ ]print ("Tab and three spaces")

if True:
[ ][t][ ]print ("Mixture")

そうは言っても、ほとんどの正気の人は、慈悲深い独裁者が意図したように、標準のインデントとして4つのスペースに固執します。

詳細については、Python:インデントに関する神話を参照してください。

于 2013-01-11T11:10:34.030 に答える
2

他のコーダーが正しく読み取ることができるように、記述されたすべてのコードにインデントが含まれるようにするために、Pythonでインデントが導入されました。

それは、コーダーが彼の自由を持っているという意味ではありません。各ブロックがそのインデントを維持している限り、異なるブロックは異なるインデントを持つことができます。

たとえば、このような作業ファイルを作成できますが、お勧めしません。

print "hello"
if True:
[TAB]print "a"
[TAB]i = 0
[TAB]if i == 0:
[TAB][SPACE][SPACE]print "b"
[TAB][SPACE][SPACE]j = i + 1
[TAB][SPACE][SPACE]if j == 1:
[TAB][SPACE][SPACE][TAB][TAB]print "c

詳細を読む... http://docs.python.org/release/2.5.1/ref/indentation.html

于 2013-01-11T11:11:47.063 に答える