3

現時点では、Pythonの空白に問題が発生したことはありません(ただし、2つのプロジェクトでのみ使用しており、プログラマーは私だけでした)。言語を学ぶ人にとって、Pythonの空白とインデントに関する潜在的な落とし穴は何ですか?

4

17 に答える 17

11

1つの行がスペースでインデントされ、次の行がタブでインデントされる一部のエディターでは、混乱する可能性があります。インデントは同じように見えますが、エラーが発生するため、これは混乱を招きます。

また、コードをコピーするときに、エディターにブロック全体をインデントする機能がない場合、すべてのインデントを修正するのは面倒な場合があります。

しかし、優れたエディターと少しの練習があれば、これは問題にはならないはずです。私は個人的にPythonが空白を使用する方法が本当に好きです。

于 2009-03-12T03:59:08.113 に答える
1

Python プログラマーがPEP 8で定義されている「インデント レベルごとに 4 つのスペースを使用する」という一般的な規則に従わない場合。( Python プログラマーでまだ読んでいない場合は、読んでください)

次に、コピーペーストの問題が発生します。

于 2009-03-12T04:33:26.177 に答える
1

良い編集者を選んでください。次のような機能が必要です。

  1. 最後のインデント行を模倣する自動インデント
  2. 制御可能な自動インデント (タブとスペース)
  3. 空白文字を表示する
  4. ファイル読み込み時の空白規則の検出と模倣

たとえば、Vim では、次の設定でタブを強調表示できます。

set list
set listchars=tab:\|_
highlight SpecialKey ctermbg=Red guibg=Red
highlight SpecialKey ctermfg=White guifg=White

これは、次を使用していつでもオフにできます。

set nolist

IMO、タブをスペースに、またはその逆に変換するエディター設定は嫌いです。タブとスペースが混在してしまい、厄介になる可能性があるためです。

于 2009-03-12T04:37:09.537 に答える
1

余白の問題は慣れの問題だと思っていました。

誰かが Python のインデントに関するいくつかの重大な欠陥を指摘しましたが、それらは非常に有効であり、これらを無意識のうちに理解していることが、経験豊富なプログラム全体を神経質にしていると思います:-

  • カット アンド ペーストだけではもう機能しません。ボイラー プレート コードを 1 つのアプリから切り取って、別のアプリにドロップすることはできません。
  • あなたの編集者はあなたを助けることができなくなります。C/Jave などでは、「公式」の中括弧のインデントと、「非公式」の空白のインデントで 2 つのことが行われています。ほとんどの編集者は、空白のインデントを中かっこのネストに合わせて再フォーマットできます。これにより、インデントが予期したものと異なる場合、何かが間違っているという文字列の視覚的な手がかりが得られます。Pythonの「スペースは構文」パラダイムでは、エディターは役に立ちません。
  • すでに複雑なロジックに別の条件を導入することの苦痛。別の if then else を既存の条件に追加すると、多くの行に手動でスペースを挿入するという、ばかげたエラーが発生しやすい多くのエラーが発生します。
  • リファクタリングは悪夢です。クラスの周りでコードのブロックを移動するのは非常に苦痛で、より良いものにリファクタリングするよりも、「間違った」クラス構造に我慢する方が簡単です。
于 2009-03-12T04:48:18.497 に答える
1

Eclipse を IDE として使用している場合は、PyDev を検討する必要があります。インデントとスペーシングを自動的に処理します。混合間隔のソースからコピーして貼り付けることができ、変換されます。この言語を学び始めて以来、スペーシングについて考える必要が生じたことは一度もありません。

そして、それは本当に問題ではありません。とにかくまともなプログラマーはインデントします。Python では、中かっこを入力して一致させる必要がないことを除いて、これまでと同じことを行うだけです。

于 2009-03-12T13:05:08.987 に答える
1

落とし穴

  • インデントを無視する Web サイトにコード スニペットを投稿するのは面倒です。

  • 複数行の匿名関数 (ラムダ) が言語の構文にどのように適合するかを理解するのは困難です。

  • PHP や C# を PHP や ASP.NET ページに埋め込むことができるように、HTML ファイルに Python を埋め込んでテンプレートを作成することは困難です。しかし、それがテンプレートをデザインする最良の方法であるとは限りません。

  • エディターにブロックのインデントとアウトデントのための適切なコマンドがない場合、コードを再調整するのは面倒です。

利点

  • 怠け者のプログラマーでさえ、読みやすいコードを作成するように強制します。私は、それを読むことができるように再フォーマットするのに何時間も費やさなければならなかったブレース言語のコードの例を見てきました...

  • Python プログラマーは、中かっこを K&R スタイルの行末に配置するか、Microsoft スタイルの行末に配置するかについて何時間も議論する必要はありません。

  • 中かっこ文字を解放して、ディクショナリおよびセット式に使用できるようにします。

  • 自動的にかなり読みやすい

于 2009-03-12T17:33:41.857 に答える
0

問題は、Pythonで、スペースを使用してファイルの1つの領域で基本ブロックをインデントし、タブを使用して別の領域でインデントすると、実行時エラーが発生することです。これは、Cのセミコロンとはまったく異なります。

しかし、これは実際にはプログラミングの問題ではありませんか?

于 2009-03-12T03:59:39.347 に答える
0

いいえ、それは私が失敗を見つけることができないことの1つだと思います. はい、確かにイライラする人もいますが、それは書式設定のスタイルについて異なる習慣を持っているためです. 早く学べば、定着します。C、Cpp、Java などの言語でスタイルの問題についてどれだけ多くの議論が行われているかを見てください。Python、F77、およびここで言及されている「固定された」書式設定スタイルを持つ言語についての (役に立たない、疑いの余地のない) 議論は見られません。

可変である唯一のものは、スペースとタブ (優れたエディターで少し問題を抱えて変更できます) と、タブが占めるスペースの量 (優れたエディターで問題なく変更できます) です。出来上がり!スタイルのディスカッションが完了しました。

今、私は何か役に立つことができます:)

于 2009-03-12T17:55:43.130 に答える
0

Python の初心者として私が経験した欠点の 1 つは、エディターでソフトタブを設定するのを忘れていたことで、多くの問題が発生しました。

しかし、この言語を 1 年間真剣に使用した後、インデントが不十分なコードを他の言語で書くことができなくなりました。

于 2009-03-12T15:51:21.573 に答える
0

Emacs を使用している場合は、ハード タブの長さを 8 に設定し、ソフト タブの長さを 4 に設定します。この方法では、不要なタブ文字に変更されます。タブの代わりに常に 4 つのスペースを使用する必要があります。

于 2009-03-12T15:40:53.360 に答える