web-dev-qa-db-ja.com

Pythonのブロックの前のコロンの目的は何ですか?

Pythonのブロックの前のコロンの目的は何ですか?

例:

if n == 0:
    print "The end"
67
Joshua Swink

コロンは、インデントされたブロックの開始を宣言するためにあります。

技術的には必要ありません。ブロックが完了すると、インデントとインデントを解除できます。ただし、 Python koan 「明示的は暗黙的よりも優れている」(EIBTI)に基づいて、Guidoは意図的にコロンを義務付けたと考えているため、anyステートメントshouldの後には、インデントされたコードがコロンで終わる必要があります。 (コロンの後に続けると、1行も許可されますが、このスタイルは広く使用されていません。)

また、構文を考慮した自動インデントエディターの作業が容易になり、これも決定に含まれます。


この質問は Python FAQ であることが判明し、Guidoによる回答の1つが見つかりました here

if/while/def/classステートメントにコロンが必要なのはなぜですか?

コロンは、主に可読性を高めるために必要です(実験的なABC言語の結果の1つ)。このことを考慮:

if a == b 
    print a

versus

if a == b: 
    print a

2番目の方が少し読みやすいことに注意してください。さらに、このFAQ answer;これは英語の標準的な使用法です。

もう1つの小さな理由は、コロンを使用すると、エディターで構文が強調表示されやすくなるためです。プログラムテキストのより複雑な解析を行う代わりに、インデントを増やす必要があるタイミングを決定するためにコロンを探すことができます。

73
tzot

Pewprikaneseで書かれた食料品店で購入する次のリストを検討してください。

pewkah
lalala
    chunkykachoo
    pewpewpew
skunkybacon

それを読んだとき、私は混乱しています、chunkykachooとpewpewpewは一種のラララですか?または、chunkykachooとpewpewpewが特別なアイテムであるという理由だけでインデントされている場合はどうなりますか?

ここで、私のPewprikaneseの友人がコロンを追加してリストをより良く解析するのを助けるとどうなるか見てみましょう:(<-このように)

pewkah
lalala:   (<-- see this colon)
    chunkykachoo
    pewpewpew
skunkybacon

これで、chunkykachooとpewpewpewが一種のラララであることは明らかです。

Pythonを学び始めた人がいるとしましょう。Pythonを習うのは彼女にとって初めてのプログラミング言語です。コロンがなければ、「この行は特別なアイテムのようなものなので、この行はインデントされている」と考え続ける可能性がかなりあります。

24
Yoo

3つの理由:

  1. 読みやすくするため。コロンは、コードが次のインデントされたブロックに流れるのを助けます。
  2. テキストエディタ/ IDEを支援するために、前の行がコロンで終わっている場合、次の行を自動的にインデントできます。
  3. pythonによる解析を少し簡単にするため。
15
Ryan

私の知る限り、読者がコロンの後にインデントが必要であることをより明確にするための意図的な設計です。

これにより、次のような構成も可能になります。

if expression: action()
code_continues()

(コメンターが言ったように)これは、良いPythonスタイルの輝かしいゴールドスタンダードではないことに注意してください。

if expression: action()

code_continues()

混乱を避けるため。最初の例で、コロンの直後にifのコードがあると、コンパイラが次の行がnotインデントされます。

5
unwind

Guido Van Rossumによると、Python発明者、構造をより明確にするためにコロンを使用するというアイデアは、Python ABC言語も初心者を対象にしています。どうやら、初期のテストでは、初心者の学習者はコロンなしの方がコロンなしの方が速く進歩したようです。Guidoの投稿python.

http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

そして、はい、コロンはワンライナーで有用であり、セミコロンよりも煩わしくないです。また、長時間のスタイルガイドでは、バイナリ演算子で終了する場合にのみ複数行で改行することをお勧めします

x = (23 + 
     24 + 
     33)

コロンを追加すると、複合ステートメントが同じように見え、スタイルの均一性が向上します。

Cobraと呼ばれるコロンのない方言だけでなく、CPythonの「コロンのない」エンコーディングがあります。それらは拾いませんでした。

0
Serge