Pythonのブロックの前のコロンの目的は何ですか?
例:
if n == 0:
print "The end"
コロンは、インデントされたブロックの開始を宣言するためにあります。
技術的には必要ありません。ブロックが完了したら、インデントとインデントを解除するだけです。ただし、Pythonの公案「明示的は暗黙的よりも優れている」(EIBTI) に基づいて、Guido は意図的にコロンを必須にしたため、インデントされたコードが続くステートメントはすべてコロンで終了すると考えています。(コロンの後に続く場合はワンライナーも使用できますが、このスタイルは広く使用されていません。)
また、構文を認識する自動インデント エディターの作業が容易になり、これも決定に含まれました。
この質問はPython FAQであることが判明し、Guido による回答の 1 つをここで見つけました。
if/while/def/class ステートメントにコロンが必要なのはなぜですか?
コロンは主に読みやすさを向上させるために必要です (実験的な ABC 言語の結果の 1 つ)。このことを考慮:
if a == b print a
対
if a == b: print a
2 番目の方が読みやすいことに注意してください。さらに、コロンがこの FAQ の回答の例をどのように引き立たせているかに注目してください。英語での標準的な用法です。
もう 1 つの小さな理由は、コロンを使用すると、エディターが構文の強調表示を簡単に行えるようになることです。プログラム テキストのより複雑な解析を行う代わりに、コロンを探してインデントを増やす必要があるかどうかを判断できます。
ピュープリカネーゼ語で書かれた食料品店から購入する次のリストを検討してください。
pewkah
lalala
chunkykachoo
pewpewpew
skunkybacon
それを読んだとき、私は混乱しました。または、chunkykachoo と pewpewpew が特別なアイテムであるという理由だけでインデントされている場合はどうなるでしょうか?
リストをより適切に解析するために、ピュープリカンの友人がコロンを追加するとどうなるか見てみましょう: (<-- こんな感じ)
pewkah
lalala: (<-- see this colon)
chunkykachoo
pewpewpew
skunkybacon
これで、chunkykachoo と pewpewpew がラララの一種であることは明らかです。
Python を学び始めている人がいるとしましょう。Python はたまたま最初に学ぶプログラミング言語です。コロンがないと、彼女は「この行は特別なアイテムのようなものなので、この行がインデントされている.」と考え続ける可能性がかなりあります.
3つの理由:
私の知る限り、これは、読者がコロンの後にインデントを期待する必要があることをより明確にするための意図的な設計です。
また、次のような構成も可能になります。
if expression: action()
code_continues()
(コメント者が行ったように)これは、優れたPythonスタイルの輝かしいゴールドスタンダードではないことに注意してください。そこに空白がある方がはるかに良いでしょう:
if expression: action()
code_continues()
混乱を避けるために。最初の例で、そのように書くことが可能であることを明確にしたかっただけですif
。コロンの直後にコードがあると、コンパイラは次の行をインデントしてはならないことを理解できるようになるからです。
Python の発明者である Guido Van Rossum によると、コロンを使用して構造をより明確にするというアイデアは、Python の前身である ABC 言語を使用した初期の実験に着想を得ており、これも初心者を対象としていました。どうやら、初期のテストでは、初心者の学習者は、結腸がない場合よりも結腸がある方が速く進歩しました。Guido の post python history blog で全文を読んでください。
http://python-history.blogspot.com/2009/02/early-language-design-and-development.html
はい、コロンはワンライナーで役立ち、セミコロンよりも煩わしくありません。また、二項演算子で終わる場合にのみ、数行に分割することをお勧めする長い時間のスタイル ガイド
x = (23 +
24 +
33)
コロンを追加すると、複合ステートメントが同じように見え、スタイルの統一性が向上します。
CPython には「コロンのない」エンコーディングと、コブラと呼ばれるコロンのない方言があります。それらは拾いませんでした。