83

Python のコーディング中、インデントに 2 つのスペースのみを使用していますが、PEP-8では実際に 4 つのスペースを使用することを推奨していますが、歴史的に私にとっては珍しいことです。

では、2 つではなく 4 つのスペースを使用するよう説得できる人はいますか? 長所と短所は何ですか?

PS 最後に、既存のすべてのコードベースを 2 つのスペースから 4 つのスペースに変換する簡単な方法は何ですか?


PPS PEP-8 また、インデントにタブを使用しないことを強く推奨します。ここを読む


要約すると、次のようになります。

長所:

  • 80 行を超える長さの文字列を折り返す場合は、配置するスペースを増やしてください。
  • スニペットからコードをコピーするだけで機能します。

短所:

  • ネストされたステートメントのレベルが深いと、実際のコード用のスペースが少なくなります。

ありがとう。

4

13 に答える 13

140

他の全員が 4 つのスペースを使用します。それが、私が遭遇して受け入れた 4 つのスペースを使用する唯一の理由です。私の心の中では、まだタブを使用したいと思っています (インデントごとに 1 つのインデント文字、意味がありますか? インデントを他の空白から分離します。タブをさまざまな幅で表示できることは気にしません。それは構文上の違いにはなりません。最悪の場合コメントの一部が一列に並んでいないということが起こる可能性があります. 恐ろしい!) しかし、python コミュニティ全体が 4 つのスペースを使用するので、私は 4 つのスペースを使用することを受け入れました. このようにして、他の人が書いたスニペットからコードを組み立てることができ、すべてが機能します。

于 2009-07-14T14:20:53.333 に答える
81

def + 1つのスペースで4つの文字が作成されるため、4つのスペース文字で関数の内部コードが適切にインデントされるという事実が気に入っています。

def·foo():
····pass
于 2009-07-14T14:30:32.553 に答える
61

本当の問題は、なぜタブではなくスペースなのかということだと思います。

タブは明らかに優れています。

  • 一貫性のないインデントを持つことはほとんど不可能です (通常は 4 つのスペースのインデントがあるコードを見たことがありますが、一部の部分がたまたま 1 つのスペースから外れているため、簡単な検査では 7 つまたは 8 つのスペースがあるかどうかを判断するのは困難です...タブストップを 1 スペースに設定しない限り、タブでは発生しません)。
  • タブはインデントの論理的セマンティック表現です。これにより、ユーザー (および他の開発者) は、他の人の設定を混乱させることなく、必要な数の「スペース」(またはむしろ列)を表示することを選択できます。
  • また、「メモ帳」(または他のダミー エディタ) しか手元にない場合は、キーストロークも少なくなります。
  • タブの追加と削除は対称的な操作です。ほとんどの IDE では、タブ キーを押すと自動的に 4 つのスペースが挿入されますが、通常、バックスペースを押すとスペースが 1 つだけ削除されます (インデント解除操作は Shift-Tab としてアクセスできますが、これは 2 つのキーの組み合わせです) またはマウスを使用してクリックします。インデントの途中で 1 文字削除します。
  • 4バイトではなく1バイトしかかかりません(数千行を掛けると、数KB節約できます!:p)
  • スペースに行くことにした場合、スペースを選択するために議論が再び開始されるため、合意を解決するためのものが1つ少なくなります(ただし、コンセンサスは約4のようです).

スペースの利点:

  • グイドは彼らが好きです。
  • ここでタブを簡単に入力することはできません。フォーカスが移動します (ただし、貼り付けることはできます)。
于 2009-07-14T14:22:45.903 に答える
17

「より良い」インデントはありません。宗教的な聖戦の話題です。インデントを明確にするのに十分なため、4 は便利ですが、画面全体がほとんど空白であり、プログラムの半分を読むために水平方向にスクロールする必要があるほどではありません。

また、「タブ」の歴史的な定義に対して「ハーフタブ」であるという利点もあります。

それ以外は、あなたのグループが好きなものを使用してください。チョコレートとバニラのようなものです。

切り替える簡単な方法は、タブとスペースタブをサポートするエディターを使用することです。先頭のスペース タブをすべてタブに変換し、タブ サイズを 4 に設定してから、先頭のタブをスペース タブに戻します。

Pythonスクリプトでも簡単に実行できます。先頭のスペースをすべて数えてから、同じ量を行の先頭に追加して書き戻します。

于 2009-07-14T14:20:22.227 に答える
14

PEP はあなたの上司ではありません。すでに一貫して 2 スペースのインデントが設定されている場合は、すべてのコードをそれに準拠するように変更する理由はありません。それが重要だと本当に思うなら、あなたはそれを先に進めることができますが、率直に言って、私はしません. あなた (およびあなたの同僚) が読み書きの両方で最も快適に過ごせるような規則を使用する方がよいでしょう。

于 2009-07-14T14:20:40.150 に答える
7

適切なエディター (emacs、vim) なら、このナンセンス全体を抽象化してくれます。スペースでもタブでも同様に機能し、任意の数のスペース (またはタブ文字の任意の数のスペース幅) を使用するように構成できます。また、あまり問題なく異なるフォーマット間で変換することもできます ( :retabvim のコマンドを参照してください)。

ソースの書式設定をまとめて変換しようとしている場合は、インデントユーティリティを確認することをお勧めします。

そうは言っても、他の質問に答えずにはいられません...私の好みは常にタブです。これは、問題全体をバイパスし、誰もが幅を適切に設定してソースコードを表示できるためです。また、変換に役立たないエディターで作業している場合は、入力が大幅に少なくなります。2 対 4 のスペースに関しては、それは純粋に表面的なものです。

于 2009-07-14T14:26:53.557 に答える
6

また、理由の 1 つは、長い行 (80 シンボルを超える) があり、それを 2 つに分割したい場合、インデントするスペースが 1 つしかないため、少し混乱することです。

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \
 and someotherstatementhere:
  # some code inside if block
  pass

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \
  and someotherstatementhere:
    # some code inside if block
    pass
于 2009-07-14T14:41:32.397 に答える
5

あなたがソース ファイルに取り組んでいる唯一のコーダーであり、特定のスタイルを強制するコーディング標準がない場合は、使い慣れたものを使用してください。個人的には (そして私たちのコーディング標準に沿って)、ハード タブを使用して、コードを見ている人が自分の好みを使用できるようにします。

変更するには、すべての行頭スペースを 2 倍の大きさに変更するだけです。これを行うには多くの方法があります。Vim テキスト エディターでは、次の 2 つを考えることができます。

:%s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)

これは単純な正規表現で、行頭で 1 つ以上のスペースのペアを探し、見つかった数の 2 倍のスペースに置き換えます。次のようにvimを開くことで、すべてのファイルを実行するように拡張できます。

vim *.py

(または同等のもの)、その後に続く (未テスト):

:argdo %s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)/ | w

または:

" Switch to hard tabs:
:set noexpandtab
" Set the tab stop to the current setting
:set tabstop=2
" Change all spaces to tabs based on tabstop
:retab!
" Change the tab stop to the new setting
:set tabstop=4
" Go back to soft tabs
:set expandtab
" Replace all the tabs in the current file to spaces
:retab

もちろん、他の多くのツールも同様の機能を提供sedawkます。perlpython

于 2009-07-14T14:19:31.603 に答える
3

識別および一般的なコーディング スタイルの標準は、言語ごと、プロジェクトごとに異なります。コーディング スタイルの標準を採用する理由は 1 つあります。それは、誰が書いたとしても、コードが統一的に見えるようにするためです。これにより、プロジェクトの読みやすさが向上し、率直に言って、見栄えが良くなります。

コーディング スタイル標準を採用するときに有効でない理由が 1 つあります。それは、それが好きだからです。コーディング標準が存在するのは、まさに人々の好みが異なるためです。好みに任せると混乱が生じ、すべての人に不利益をもたらします。

誰も読まない自分だけのコードを書いている場合は、好きなように書いてください。それ以外の場合は、コミュニティで受け入れられている標準に従うことで、コードが他のすべての人にとってより快適なものになります。また、将来コミュニティにコードを寄稿することに決めた場合でも、そのコミュニティのコーディング スタイルに慣れていれば、より簡単に作業できることを忘れないでください。

タブ サイズの変更に関しては、Python をサポートする多くのソース コード フォーマッタがあり、ほとんどのプログラマのエディタと IDE にもこの機能があります。おそらく既にお持ちだと思いますが、使用しているエディターのドキュメントを参照するだけです。

于 2009-07-14T14:20:10.417 に答える
1

1つの理由は、インデントに使用するスペースを少なくすると、より多くのステートメントをネストできるようになることです(通常、行の長さは80に制限されているため)。

ネストされた構成要素の最大数については、まだ意見が分かれている人もいると思います。

于 2009-07-14T14:29:15.863 に答える
1

4 つのスペースを含む長いネストされたコード ブロックを視覚的に識別しやすくなります。デバッグ時の時間を節約します。

于 2010-02-22T18:00:48.933 に答える
0

4 つのスペースを使用するか、2 つのスペースを使用するかは完全にあなた次第です。4 つのスペースは単なる規則です。最も重要なことは、タブとスペースを混在させないことです。スペースバーを使用する

于 2009-07-14T14:25:51.470 に答える