Python pep-8がインデントのためにタブよりもスペースを強く推奨するのはなぜですか?


147

Stack OverflowとPEP 8で、Pythonプログラムのインデントにはスペースのみを使用することをお勧めします。一貫したインデントの必要性を理解でき、その痛みを感じました。

スペースが優先される根本的な理由はありますか?タブの方がはるかに扱いやすいと思いました。


7
知るためにPEPの議論を読んでください。
e-satis

106
1レベルのインデントは... 1. 1つのタブをすべて使用できる場合にN個のスペースの使用に同意する必要があることは完全に非論理的です。ちなみに、これはまさにそれを行うためのものです。インデント。一度。1レベルのインデント= 1つの単一文字、つまり1つのタブ。そして、各コーダーがそれを視覚化する方法を自由に選択できるため、それらはより便利です。スペースの使用はばかげています。私は、愚かではない単一の引数を見たことはありません。
o0 '。

31
@BlueBomber、そしてあなたがそれにいる間、人々にあなたが好きなフォントサイズと配色を強制しないのはなぜですか?まだバカ。
o0 '。

10
@BlueBomberいいえ、いいえ、まったく同じレベルの不条理です。
o0 '。

9
@BlueBomber違いは何ですか?他の開発者による環境の構成の自由度が低下し、顕著なメリットは得られません。独裁者になりたい場合、2または4または29のスペースに対応するインデントでコードを全員に表示させる場合でも、タブでこれを行うことができます。部下にIDEを設定して、希望するスペース数に対応するタブを表示するように依頼してください。これを行う権限がない場合は、インデントの単位がどれだけ広い範囲で自分の目にとって快適かを、自分で決定するように依頼する必要があります。
Asad Saeeduddin 2014

回答:


111

答えはPEPのすぐそこにありました[ed:この一節は2013年に編集されました]。私は引用します:

最も人気のある Pythonのインデントの方法は、スペースのみです。

他に必要な根本的な理由は何ですか?

簡単に言えば、最初の段落で述べたPEPの範囲も考慮してください。

このドキュメントは、メインのPythonディストリビューションの標準ライブラリを構成するPythonコードのコーディング規約を提供します。

その意図は、公式のPythonディストリビューションに含まれるすべてのコードを一貫した形式にすることです(これが普遍的にGood Thing™であることに同意できることを願っています)。

個々のプログラマーのスペースとタブの間の決定は、a)本当に好みの問題であり、b)技術的手段(エディター、変換スクリプトなど)によって簡単に処理されるため、すべての議論を終了する明確な方法があります。 。

選択するのはグイドでした。彼は理由を述べる必要はなかったが、それでも経験的なデータを参照することによってそうした。

他のすべての目的のために、このPEPを推奨事項として使用するか、それを無視することができます(選択、チーム、またはチームリーダー)。

しかし、私があなたに一つのアドバイスを与えるかもしれない場合:混ぜないでください;-) [ed:タブとスペースの混在はもはやオプションではありません。]


11
同意した。一貫性は、タブ対Xスペース対Yスペースよりも重要です。
Mike Clark

10
なぜ標準ライブラリには非常に多くのmixedCaseメソッド名があるのでしょうか?
カイルワイルド

6
@dorkitude:a)完璧な人はいません。b)歴史的な理由。

8
では、なぜそれほど多くのプログラマがPEP-8より前にスペースを使用することを選択したのでしょうか。それが私が本当に知りたいことです。タブの利点は私には明らかですが、スペースではありません。
罪のない


95

まあ、誰もが空間に強く偏っているようです。タブのみを使用しています。理由はよくわかります。

タブは実際にはスペースの後に生まれたクールな発明です。何百万回もスペースを押したり、スペースを生成する偽のタブを使用したりせずにインデントすることができます。

誰もがタブの使用を差別しているのはなぜかわかりません。これは、高齢者が若い人を差別して新しいより効率的なテクノロジーを選択し、パルスダイヤリングがこれらの派手な新しいものだけでなくすべての電話で機能することを訴えるのとよく似ています。「トーンダイヤリングはすべての電話で機能するわけではありません。そのため、それは間違っています。」

エディターはタブを適切に処理できませんか?さて、最新のエディターを入手してください。今こそ21世紀の時代であり、編集者がハイテクで複雑なソフトウェアの一部であった時代はもう過ぎ去っています。現在、膨大な数のエディターから選択することができ、それらすべてがタブをサポートしています。また、タブをいくらにするかを定義することもできます。スペースではできません。タブが表示されませんか?議論についてそれは何ですか?まあ、スペースも見えない!

より優れたエディターを手に入れるために私が大胆に提案してもいいですか?10年ほど前にリリースされたこれらのハイテク製品の1つで、目に見えない文字表示されますか?(皮肉オフ)

スペースを使用すると、削除とフォーマットの作業が大幅に増加します。これが(そしてこれを知って私に同意する他のすべての人々が)Pythonにタブを使用する理由です。

タブとスペースを混在させることは、禁止事項ではありません。それはめちゃくちゃで、うまくいかない。


26
これに追加するには、キーボードを見てください。TABキーの記号はインデントを明確に表しています。スペースではなく、キーのインデントされた目的です。- PEP8は間違いの私見であるが、それは単なる勧告でスペースを使用することをお勧めしますen.wikipedia.org/wiki/Tab_character#Tab_characters
ダニエルSokolowski

29
この投稿に完全に同意します。スペースの使用は、インデントエラーから1スペース離れたところにつまずくのを楽しむ愚か者のためのものです。インデントが1タブずれていた場合は、それに気づくはずです。
Sepero 2013

12
@Zingham 誰もタブを排他的に使用することはできません。タブとスペースは常に組み合わせて使用​​されるため、矛盾が生じます。 私や他の何千人もの人々が、毎日それらをかなり一貫して使用しています。インデント用のタブ、位置合わせ用のスペース。この概念のどの部分を正確に把握するのが非常に難しいと思いますか。一貫して適用することが不可能であると確信しているのはなぜですか。
2016年

1
タブに関する実際の問題は、コメント「#で始まる区切り文字」で同じPEP8によって推奨される文字への正確なインデンドを取得できないことです。それだけがスペースを好む理由です:インデントを正しくするためです!
user541905 2017

1
問題は、「Python pep-8がインデントのためにタブよりもスペースを強く推奨するのなぜですか?」です。。この回答では、PEP8については何も触れられていません。||| 質問に答えようとするのではなく...この答えは、主に意見を否定する大きな説得力のあるものとして私に伝わります。「タブはスペースよりも優れていて、ここに理由がある...」という言葉は276あります。
Trevor Boyd Smith

42

私は個人的にタブの上のスペースに同意しません。私にとって、タブはドキュメントレイアウトの文字/メカニズムであり、スペースはコードの場合のコマンド間のコンテンツまたは区切りのためです。

タブは本当に問題ではなく、人々とタブとスペースをどのように混在させたいかが問題であるというジムのコメントに同意する必要があります。

とはいえ、私は慣習上スペースを使わざるをえませんでした。私は個人の好みよりも一貫性を重視しています。


3
私もスペースを使用するように強制しようとしましたが、特に非表示の文字の表示を有効にすると、エディター(少なくともEclipse + PyDev)の賢明なタブが有効になります。また、タブを視覚的に4、8、6スペースに簡単に設定できます。そのため、私のコードでは、少なくとも個人的な好みを重視し、既存のコードベースで確立された規則である場合はスペースに固執します。
Daniel Sokolowski、2013年

2
チームでコーディングをしていなければ問題ありません。チームに入ると、1つの大会に同意してそれを守ります。
ソビエト2013年

1
@ソビウトそれはたいてい私にとって希望的な考えのようです。私がこれまでに参加したすべてのチームで、公式のパーティーラインは「スペースの使用」でした。実際には、事実上すべてのファイルがタブとスペースの両方の合計の混乱であり、スペースのみまたはタブのみを一貫して使用したファイルでさえ、インデントはまだ至る所にありました。
2015年

ええ、でもそれが私が言ったことです。最終的にある程度のコンセンサスが得られ、施行されます。あなたが言ったように、それは通常「スペースを使うだけ」です。
2015年

これが私がタブを好む主な理由です。レイアウトと単語区切りに別々の文字を使用するのは理にかなっています
woojoo666

31

スペースの理由は、タブがオプションであるためです。スペースは、句読点の実際の最も一般的な分母です。

すべてのまともなテキストエディタには「タブをスペースに置き換える」機能があり、多くの人がこれを使用しています。しかしいつもではない。

一部のテキストエディターは一連のスペースをタブに置き換える場合がありますが、これは非常にまれです。

ボトムライン。スペースがあっても間違いはありません。タブに問題があるかもしれません。そのため、タブを使用しないで、ミスのリスクを減らしてください。


15
他の人(人、テキストエディターなど)の多くが誤った方法を使用しているからといって、私が何かを間違った方法で実行することは決してありません。2015年には、タブを適切に処理しないテキストエディタがゴミ箱に含まれています。
2015年

2
「スペースを間違えることはできません。タブを間違える可能性があります」。100%topsy-turvyが正しくないことがわかりました。私の経験では、「タブは問題ありません。スペースで問題が発生する可能性があります」...特にコードを共有する場合。
cmroanirgo 2017

5
それで誰かがついにそれを言った:それは最も低い共通の分母であるのでスペースを使用しなさい。同じ規則により、MBR、BIOS、および政府機関の紙のフォームを保持することができました。ただし、これらには実際には概念的な問題がありますが、タブとスペースは100%愚かなユーザーの問題です。
ミリンドR 2017

1
これは私にはArgumentumの広告母集団であるように思われます。多くのまたはほとんどの人がそれを信じているため、命題は真実であると結論付ける誤った議論です。すべてのエディターがタブをスペースに置き換えることができるため、スペースは正しい選択です。
Djunzu 2017年

27

タブの問題は、タブが見えず、人々がタブの幅に同意できないことです。タブとスペースを混在させ、タブストップをPython以外の場所に設定すると(8つのスペースごとにタブストップを使用)、Pythonとは異なるレイアウトでコードが表示されます。また、レイアウトによってブロックが決まるため、さまざまなロジックが表示されます。微妙なバグにつながります。

または悪化し、タブとスペースを混合- -あなたがPEP 8を挑むとタブを使う、という場合は、少なくとも常に作る「-tt」引数、とのpythonを実行矛盾インデント(時にはタブ、同じインデントのために、時にはスペースをレベル)エラー。また、可能であれば、タブを異なる方法で表示するようにエディターを設定してください。しかし、実際には、タブ、ピリオドを使用しないことが最善のアプローチです。


43
タブが見えないことは事実であり、人々はタブの幅に同意することができません。しかし、スペースについても同じことが言えます。タブとスペースを混在させると、問題が発生します。しかし、なぜその状況をタブではなくスペースで非難しているのですか?
ジム

47
いいえ、同じことはスペースには当てはまりません。人々はスペースの幅に同意することができます。
ラファウDowgird

32
単一のスペースは常に同じ幅である場合がありますが、スペースを含むインデントは常に同じ幅ではありません。n個のスペースでタブを使用することに同意することが、n個のスペースでインデントすることに同意することとどのように異なるかはわかりません。
ジム

26
はい、2つを混合すると問題が発生する可能性があることを知っています。私が理解していないのは、一部の人々がタブでそれを非難する理由です。問題は、特にタブではなく、それらを混ぜることです。タブをスペースに置き換えることで問題を解決できますが、スペースをタブに置き換えることでも問題を解決できます。
ジム

70
いいえ、8幅のタブを使用していて、6幅のタブを使用していて、コードを共有している場合、コードがめちゃくちゃになりません。これはすべて、Pythonインタープリターに対する単一のタブです。
ジム

22

インデントに関する主な問題は、タブとスペースを混在させると発生します。明らかにこれはあなたがどちらを選択すべきかを教えてくれませんが、コインを投げてそれを選んだとしても、それを推薦するのは良い理由です。

ただし、IMHOタブよりもスペースを優先するいくつかのマイナーな理由があります。

  • さまざまなツール。コードがプログラマーのエディターの外に表示されることがあります。例えば。ニュースグループまたはフォーラムに投稿されました。ここではスペースは一般にタブよりも優れています-スペースが壊れるところはどこでも、タブも同様ですが、その逆ではありません。

  • プログラマーはソースの見方を変えます。これは非常に主観的です。タブの主な利点か、どちらの側にあるかによってタブを回避する理由のどちらかです。プラス面として、開発者は好みのインデントでソースを表示できるため、2スペースインデントを好む開発者は、同じソースで8スペースの開発者と一緒に作業しても、好きなように表示できます。欠点は、これには反響があることです。8スペースのようにネストが深すぎるという非常に目に見えるフィードバックを提供するため、8スペースが好きな人もいます。すべての開発者に同じ方法でコードを見てもらうと、行の長さなどの一貫性が向上します。

  • 行のインデントを続けます。行をインデントして、前の行から移動したことを示すことが必要な場合があります。例えば。

    def foo():
        x = some_function_with_lots_of_args(foo, bar, baz,
                                            xyzzy, blah)

    タブを使用している場合、スペースとタブを混在させずにエディターで異なるタブストップを使用しているユーザーがこれを調整する方法はありません。これにより、上記のメリットが効果的に失われます。

もちろん、これは非常に宗教的な問題であり、プログラミングはこの問題に悩まされています。最も重要な問題は、1つを選択する必要があることです。時々私は重要なインデントの最大の利点は、少なくともブレース配置フレームウォームを免れていることだと思います。

この問題に関するJamie Zawinskiによるこの記事も読む価値があります。


3
ただし、配置は簡単です。ブロックのように角かっこを使用して、各引数をインデントします。また、あなたの例では引数リストの中にいるのでスペースを使うことができ、そこに好きなだけスペースを積み重ねることができます。
ソビエト連邦共和国2009年

3
@ソビウト:スペースでインデントすると、別のタブサイズで表示するとすぐに配置がめちゃくちゃになります。それを維持する唯一の方法は、インデントレベルまでタブを使用し、残りのスペースをスペースを使用することです。つまり、スペースとタブを混在させると、独自の問題が発生します。
ブライアン

ええ、それが私がとにかく引数にブロックインデントのPython規約を使う傾向がある理由です。確かに、それらは左中かっこに並んでいない可能性がありますが、それらが属している行またはコマンドはまだ明らかです。jQuery構文も同様の原理で動作します。
ソビエト2009年

2
@ブライアン:どのように問題が発生するのかはわかりません。インデント用のタブ、配置用のスペースなど、まさに正しい方法です。インデント用にスペースとタブを混在させることとはまったく異なります。
2015

1
@CoreDumpErrorええと、確かに違います。Python 3は自分のスクリプトについて文句を言わないので、インデントやスペースにタブを使用して、すべてののろわれた時間を揃えているので知っています。また、PEP8は単なる推奨事項(そして私の意見では厳選されたもの)であるため、何も「禁止」することはできません。
2016

12

タブを使用すると、PEP 8の別の側面が混乱することに注意してください。

すべての行を最大79文字に制限します。

仮に、タブ幅2を使用し、タブ幅8を使用するとします。最長の行が79文字になるようにすべてのコードを記述してから、ファイルの作業を開始します。(PEPの状態によると)次の理由により、コードが読みにくくなりました。

ほとんどのツールのデフォルトのラッピングは、コードの視覚的な構造を混乱させます

私たち全員が4つのスペースを使用する場合、それは常に同じです。エディターが80文字幅をサポートできる人なら誰でも、コードを快適に読み取ることができます。注:80文字の制限はそれ自体が聖戦であるため、ここでは開始しません。

しゃべらないエディタには、タブのように(挿入と削除の両方で)スペースを使用するオプションがあるはずです。そのため、これは実際には有効な引数ではありません。


7

質問に対する答えは次のとおりです。PEP-8は推奨事項を作成することを望んでおり、スペースの方が人気があるため、タブよりもスペースを強く推奨することを決定しました。


PEP-8に関する注意

PEP-8は「インデントレベルごとに4つのスペースを使用する」と言います。
これが標準の推奨事項であることは明らかです。

「めちゃくちゃにしたくない本当に古いコードの場合は、8スペースのタブを引き続き使用できます。」
タブを使用できる状況がいくつかあることは明らかです。

「タブとスペースを混在させないでください。」
これは明らかに混合の禁止です-私たちは皆これに同意すると思います。Pythonはこれを検出でき、多くの場合は窒息します。-tt引数を使用すると、これは明示的なエラーになります。

'Pythonをインデントする最も一般的な方法はスペースのみです。2番目に人気のある方法はタブのみです。
これは明らかに両方が使用されていることを示しています。非常に明確にするために、スペースとタブを同じファイルに混在させないでください。

「新しいプロジェクトでは、タブよりもスペースのみを強くお勧めします。」
これは明確な推奨事項であり、強力な推奨事項ですが、タブの禁止ではありません。


PEP-8で自分の質問に対する良い答えが見つかりません。私はこれまで他の言語で使用してきたタブを使用しています。Pythonは、タブを排他的に使用するソースを受け入れます。それで十分です。

スペースでの作業に挑戦したいと思いました。私のエディターでは、スペースのみを使用するようにファイルタイプを構成したので、Tabキーを押すと4つのスペースが挿入されます。タブを何度も押すと、スペースを削除する必要があります! ああ! 削除はタブの4倍!私の編集者は、インデントに4つのスペースを使用していることを認識できません(ただし、ANエディターがこれを実行できる場合があります)。明らかに、一度に1つずつスペースを削除するように要求しています。

Pythonは、インデントを読み取るときにタブをnスペースと見なすように指示できませんか?インデントごとに4つのスペースとタブごとに4つのスペースについて合意し、Pythonでこれを受け入れることができれば、問題はありません。
問題の双方に有利な解決策を見つける必要があります。


1
どのエディタを使用していますか?私が使用したほとんどのオプションには、インデントの実装に関係なく、バックスペースで字下げするオプションがあります(emacsはこのように動作します)。
ブライアン

その通りです-バックスペースをデデントするオプションは表示されませんが、シフトタブを使用するか、インデントを減らす(デフォルトではctrl-shift-i)代わりに対処できます。
ブライアン

私はPyScripterを試しているだけです。タブを押すとスペースを使用し、バックスペースを押すと4で削除する方がロードが良いようです。
quamrana 2009

28
「スペースを削除する必要があります!ああ!タブの4倍の数の削除!」-これが私がすべてにタブを使用する唯一の理由であり、スペースを使用する人々が正気でないと思う理由です。:)スペースを使用するWebから何かを貼り付ける場合を除いて、問題は一度もありませんでした。次に、単純な検索置換でそれを修正します。
Aphex

3

コードでは常にタブを使用しています。そうは言っても、最近スペースを使用する理由を見つけました。NokiaN900インターネットタブレットで開発するとき、タブキーのないキーボードができました。これにより、タブをコピーして貼り付けるか、スペースを使用してコードを書き直す必要がありました。他の電話でも同じ問題が発生しました。確かに、これはPythonの標準的な使用法ではなく、覚えておくべきことです。


2

JWZはそれを最もよく言います

[人々が]コードを読んでいて、新しいコードの作成が終わったら、新しいスコープ(またはsexprなど)が開いたときにコードがインデントする傾向がある画面列の数を気にします...

...私の意見では、技術的な問題を解決する最善の方法は、ASCII#9 TAB文字がディスクファイルに表示されないようにすることです:行をディスクに書き込む前に、エディターでTABを適切な数のスペースに拡張するようにプログラムします。 ..

...これは、文字列定数や文字定数など、実際に重要な場所でタブを使用しないことを前提としていますが、絶対に使用しません。タブであることが重要な場合は、代わりに常に「\ t」を使用します。


10
それとは逆に、タブにはインデントの意味があります。そのため、タブを保存してスペースを表示する方が理にかなっています。ユーザーはフォーマットスタイルを選択でき、エディターはそれに応じてタブを展開します。
AkiRoss 2013

1
タブとスペースが混在している問題があり、1人の作成者がタブごとに1列を使用して4回以上インデントしているため、各タブ文字を4列の幅で表示するように設定されたテキストエディターで見栄えが悪くなります。インデント用のタブは、プロポーショナルスペースフォントを使用するワードプロセッサのような可変幅のテキストエディターで最も意味があります。固定幅のテキストエディターではそれほどではありません。
Mark Cidade、2013

2
いいえ、私はテキストエディターが言語の文法を解析し、集計がいつ行われるかを理解できる必要があることを意味していました。これにより、タブはフォーマット手段としてのみ使用でき、インデントにスペースを使用する必要がなくなります。「タブ」の幅を固定する必要はありません。今日のテクニック(例:機械学習)では、プログラマにとってフォーマットが依然として問題であることは一般的に残念です。すべてを自動化する必要があり、それは自動化され、透過的でなければなりません。
AkiRoss 2013

それがどうやって理解できるかわかりません。
Mark Cidade、2013

1

Pythonはプログラム構造を認識するためにインデントに依存しているため、IDを識別する明確な方法が必要です。これが、スペースまたはタブを選択する理由です。

ただし、pythonにも物事を行う方法が1つしかないという強い哲学があるため、インデントを行う1つの方法に関する公式の推奨事項があります。

スペースとタブの両方は、エディターがインデントとして処理するために独特の課題を提起します。タブ自体の処理は、エディター間またはユーザー設定間で統一されていません。スペースは構成可能ではないため、結果がどこでも同じになることを保証するため、より論理的な選択が可能になります。


8
また、すべての編集者がその配色も選択する可能性があるので、どの配色を使用するように指示する必要があると思いますか?
o0 '。

8
はい、しかしこの不一致は実際にはもっと理にかなっていますか?それは単に視覚的な好みの問題だからです。エディターで「見た目」のインデントを大きくしたい場合は、タブを8スペースに設定できます。小さくしたい場合は、2に設定できます。これにより、コードは、実際に書式を変更せずに、それを観察します。
dennmat 2013

8
dennmatに同意します。視覚的に2つのスペースを好み、Guidoは視覚的に4つのスペースを好む場合、論理的な選択はタブインデントを使用することです。
Sepero 2013

0

タブよりもスペースの方が優れていると言える最も重要な利点は、多くのプログラマーやプロジェクトがソースコードに設定された数の列を使用し、タブストップを2スペースに設定して変更をコミットし、プロジェクトが4スペースをタブストップの長い行は、他の人のエディタウィンドウには長すぎます。タブの方が扱いやすいことに同意しますが、スペースはコラボレーションの方が簡単だと思います。これは、Pythonのような大規模なオープンソースプロジェクトでは重要です。


2
これは誤りです。これは、タブとスペースを混在させた場合にのみ発生し、スペースではなくタブを使用するように全員に強制することで同様に解決します。
o0 '。

0

あなたはあなたのケーキを持って、それを食べることができます。自動的にタブをスペースに展開するようにエディターを設定します。

(それは:set expandtabVimにあります。)


0

私の推測では、ほとんどのLinuxテキストエディタは、デフォルトをデフォルトで途方もなく大きく見せています。タブの上にスペースを使用する他の理由はありません。


-1

既に指定されている他のすべての理由(一貫性、スペースとタブを決して混在させないなど)に加えて、4つのスペースの規則に注意する理由がさらにいくつかあると思います。これらはPython(およびおそらくインデントが意味を持つ他の言語)にのみ適用されます。個々の設定によっては、他の言語ではタブの方が優れている場合があります。

  1. エディターにタブが表示されない場合(構成によってはかなりの数が発生します)、別の作成者がコードで4つのスペースを使用していると想定する場合があります。b/ cほとんどすべてのPythonコードが公開されています。同じエディタのタブ幅が4の場合、厄介なことが起こる可能性があります。少なくとも、貧しい人は、慣習に固執することで非常に簡単に回避できるインデントの問題で時間を失うことになります。だから私にとって、一番の理由は一貫性のあるバグを避けることです。

  2. タブとスペースのどちらが良いかという問題を再構成する場合、タブの利点がどれであるかを尋ねる必要があります。タブを称賛する投稿はたくさんありますが、タブに対する説得力のある議論はほとんどありません。emacs、vi(m)、kateなどの優れたエディターは、コードのセマンティクスに応じて適切なインデントを行います。同じエディターは、バックスペースなどでインデントを解除するように簡単に構成できます。

  3. 一部の人々は、コードの外観/レイアウトを決定する自由に関して、非常に強い好みを持っています。他の人はこの自由についての一貫性を評価します。Pythonは、ブロックなどにインデントが使用されることを指示することにより、この自由度を大幅に削減します。これは、バグまたは機能と見なされる場合がありますが、Pythonを選択することである程度発生します。個人的には、私はこの一貫性が好きです。新しいプロジェクトでコーディングを開始するとき、少なくともレイアウトは私が慣れているものに近いので、かなり読みやすいです。ほとんどいつも。

  4. インデントにスペースを使用すると、コードを理解しやすくなる「レイアウトトリック」が可能になります。これらのいくつかの例がPEP8にリストされています。例えば。

    foo = long_function_name(var_one, var_two,
                             var_three, var_four)
    
    # the same for lists
    a_long_list = [1,
                   2,
                   # ...
                   79]
    
    # or dictionaries
    a_dict = {"a_key": "a_value",
              "another_key": "another_value"}

    もちろん、上記は次のようにうまく書くこともできます

    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)
    
    # the same for lists
    a_long_list = [
        1,
        2,
        # ...
        79]
    
    # or dictionaries
    a_dict = {
        "a_key": "a_value",
        "another_key": "another_value"}

    ただし、後者はより多くのコード行を必要とし、より少ない行がより良いと主張されることがあります(b / c 1つの画面でより多くを取得します)。しかし、アラインメントが好きな場合、スペース(優れたエディターで支援されることが望ましい)は、ある意味で、タブよりもPythonの自由度を高めます。[まあ、一部のエディターではタブと同じようにできる;)-しかしスペースがあれば、すべてのエディターがそうする...]

  5. 他の皆がするのと同じ議論に戻る-PEP 8はスペースを指示します(大丈夫、強くお勧めします)。もちろん、タブのみを使用するプロジェクトの場合は、選択肢がほとんどありません。しかし、PEP 8規約の確立により、ほとんどすべてのPythonプログラマーがこのスタイルに慣れています。これにより、ほとんどのプログラマーが受け入れているスタイルについてのコンセンサスを見つけるのが非常に簡単になります。そうしないと、スタイルについて個人に同意させるのが非常に難しい場合があります。

  6. スタイルの強制に役立つツールは、通常、余分な労力なしでPEP 8を認識します。それは大きな理由ではありませんが、すぐに機能するのは素晴らしいことです。


-3

タブの一般的な問題は、タブが異なる環境で異なる方法で表現できることです。
特定のエディターでは、タブが8スペースまたは2
である場合があります。エディターによっては、これを制御できる場合とできない場合があります。

タブに関するもう1つの問題は、タブが印刷出力でどのように表されるかです。ほとんどのプリンターはタブを8スペースとして解釈すると思います。

スペースがあれば間違いありません。すべてが作者の意図したとおりに並びます。


14
タブを根本的に誤解しているもう1人...機械式タイプライターを手に入れて、しばらくそれをいじってください。1つのタブは8つのスペースに等しくありません!up_to_8_spacesと同じです!otoh:プロポーショナルフォントでは、タブは配置を保証する唯一の方法です。

3
「特定のエディターでは、タブが8スペースまたは2スペースになる場合があります。」私が4スペースが好きで、友達が8スペース、2スペース、3スペースなどが好きなら、私たちは両方ともタブに同意できます(専用のインデント文字であるため)、エディターはそれらが何であるかを認識して表示できるためそれに応じて。私は4スペース幅のインデントでコードを表示します。8スペース幅のインデントでコードを表示します。奇妙な友人が彼の3スペースを使用しており、すべてがクールです。タブの幅自体が問題になる状況(特にPythonの場合!)は非常にまれであるため、スペースの支持者でさえもめったに表示されません。
JamesTheAwesomeDude 2015年

-4

コメントでのジムとトーマス・ウータースの議論について。

問題は...タブとスペースの両方の幅が変わる可能性があるため-プログラマーがどちらの幅にも同意できないため-タブのせいになっているのはなぜですか?

私はジムに同意します-タブ自体は悪ではありません。しかし問題がある...

スペースを使用して、「MY OWN CODE」を制御できます と、世界中のすべてのエディターでがます。4つのスペースを使用する場合、どのエディターでコードを開いても、左マージンからの距離は同じになります。タブの場合、私はエディターのタブ幅設定に翻弄されています-自分のコードについても同様です。そして、私はそれが好きではありません。

したがって、スペースでも一貫性を保証できないことは事実ですが、少なくともスペースによって、どこでもOWNコードの外観をより詳細に制御できます。タブでは不可能です。

プログラマーがコードを書くときの一貫性ではなく、そのコードを表示するエディターの一貫性が原因です。スペースを使用することで、実現が容易になります。


6
あなたは「エディタのタブ幅設定に翻弄されている」のですか?エディターで必要なタブ幅を設定できない場合は、notepad.exeを使用している可能性があります
user137369

4
@zigg彼(彼女?)は自分のコード(具体的には太字、斜体、すべて大文字)について具体的に話しているので、それは議論とは無関係です。議論のどこにも関連するコードを共有していません。
user137369 2013

1
コードを表示するためのツールはエディターだけではありません。また、差分、トレースバック、Github、その他のWebページなどもあります。これらはすべて、コントロールからタブ幅を選択します(おそらく8)。
RemcoGerlich 2015年

あなたの言ってる事がわかります。確かに、(インデントに関して)誰もがあなたのコードをどのように見るかを制御します。次のステップは、コードを表示するために誰もが使用するフォントの種類と色を制御することです。その後、あなたはコードエディタだけでなく、世界自体を支配する準備ができています!!
Djunzu 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.