web-dev-qa-db-ja.com

Python:インデントに4つのスペースを使用します。どうして?

pythonインデントに2つのスペースのみを使用していますが、確かに PEP-8 は4つのスペースを使用することをお勧めしますが、歴史的に私にとっては珍しいことです。

だから、誰かが2つではなく4つのスペースを使用するように私を説得できますか?賛否両論

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


P.P.S. PEP-8また、インデントにタブを使用しないことを厳しくお勧めします。 ここを読む


したがって、要約すると:

長所:

  • 80行を超える文字列を折り返す場合は、より多くのスペースを確保してください。
  • スニペットからコードをコピーすることができ、それだけで動作します。

短所:

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

ありがとう。

67
HardQuestions

他の人はすべて4つのスペースを使用します。それが、私が出会って受け入れた4つのスペースを使用する唯一の理由です。私の心では、まだタブを使用したいと思っています(インデントごとに1インデント文字、意味がありますか?他の空白とインデントを分離します。タブが表示異なる幅、発生する可能性のある最悪の事態は、コメントの一部が揃っていないことです。恐怖!)しかし、pythonコミュニティ全体で4このように、他の人が書いたスニペットからコードを組み立てることができ、すべてが機能します。

109
Markus

Def + one spaceは4文字を作成するため、4つのスペース文字が関数の内部コードをうまくインデントするという事実が気に入っています。

def·foo():
····pass
68
Ionuț G. Stan

本当の質問は、タブではなくスペースである理由だと思います。

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

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

スペースの利点:

  • グイドはそれらが好きです。
  • ここに簡単にタブを入力することはできません。フォーカスを移動します(ただし、貼り付けることはできます)。
44
fortran

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

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

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

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

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

14
Christopher

PEPはあなたの上司ではありません。すでに一貫して2スペースインデントされている場合は、すべてのコードをそれに合わせて変更する必要はありません。あなたは本当にそれが非常に重要だと思うなら、あなたはそれを前進させることができますが、率直に言って、私はそうしません。読み方と書き方の両方で、あなた(および同僚)に最も快適な慣習を提供することをお勧めします。

12
Pesto

適切なエディター(emacs、vim)は、このナンセンスを抽象化します。スペースまたはタブでも同様に機能し、任意の数のスペース(またはタブ文字の任意の数のスペース幅)を使用するように構成できます。また、面倒なことなく異なる形式間で変換できます(:retabコマンド(vim)。

ソースのフォーマットを一括して変換しようとしている場合は、 indent ユーティリティをご覧になることをお勧めします。

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

7
rmeador

また、理由の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
5
HardQuestions

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

変更するには、すべての行頭スペースを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

もちろん、他の多くのツールも同様の機能を提供します。sedawkPerl、またはpythonのようなものがこれを簡単に実行できなかった場合、私は驚くでしょう。

4
DrAl

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

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

誰も読まない自分だけのコードを書いている場合は、好きなように書いてください。そうでない場合、コミュニティの受け入れられた標準に従うことで、コードが他の人の目にはるかに快適になります。また、将来コミュニティにコードを提供することにした場合、既にコーディングスタイルに慣れている方が楽になることを忘れないでください。

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

3

他のプログラマと一緒にpythonコードを記述したい場合、それらとは異なるインデントを使用すると問題になります。ほとんどのPythonスペースインデント。

1
Christian

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

今では、ネストされたコンストラクトの最大数について意見を異にする人もいると確信しています。

1

4つのスペースを持つ長いネストされたコードブロックを視覚的に識別する方が簡単です。デバッグ時の時間を節約します。

1
user278892

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

0
ghostdog74