Какова цель двоеточия перед блоком в Python?

Какова цель двоеточия перед блоком в Python?

Пример:

if n == 0:
    print "The end"

Ответ 1

Двоеточие должно объявить начало отступающего блока.

Технически, это не обязательно; вы можете просто отступать и отступать, когда блок сделан. Однако, основываясь на Python koan, "явный лучше, чем неявный" (EIBTI), я считаю, что Гвидо сознательно сделал двоеточие обязательным, поэтому любое утверждение за которым должны следовать отступы конца кода в двоеточие. (Он также позволяет однострочным, если вы продолжаете после двоеточия, но этот стиль не используется широко.)

Он также облегчает работу с синтаксическими автоотступящими редакторами, что также учитывается в решении.


Этот вопрос оказывается Python FAQ, и я нашел один из его ответов Guido здесь:

Почему нужны двоеточия для операторов if/while/def/class?

Двоеточие требуется в первую очередь для повышения удобочитаемости (один из результатов экспериментального ABC-языка). Рассмотрим это:

if a == b 
    print a

против

if a == b: 
    print a

Обратите внимание на то, как второй легче читать. Также обратите внимание, как двоеточие выдает пример в этом ответе на часто задаваемые вопросы; его стандартное использование на английском языке.

Еще одна незначительная причина заключается в том, что двоеточие упрощает работу редакторов с подсветкой синтаксиса; они могут искать двоеточия, чтобы решить, нужно ли увеличивать отступы, а не выполнять более тщательный анализ текста программы.

Ответ 2

Рассмотрим следующий список вещей, которые можно купить в продуктовом магазине, написанном в Pewprikanese.

pewkah
lalala
    chunkykachoo
    pewpewpew
skunkybacon

Когда я это прочитал, я смущен: "Являются ли chunkykachoo и pewpewpew какой-то лалалой? Или что, если chunkykachoo и pewpewpew отступают только потому, что это специальные предметы?

Теперь посмотрим, что произойдет, когда мой друг Pewprikanese добавит двоеточие, чтобы помочь мне разобрать список лучше: (< - like this)

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

Теперь ясно, что chunkykachoo и pewpewpew - это своего рода лалала.

Скажем, есть человек, который начинает изучать Python, который, оказывается, является ее первым языком программирования для изучения. Без двоеточия существует значительная вероятность того, что она будет продолжать думать: "Эти строки отступают, потому что эти строки похожи на специальные элементы". И это может занять некоторое время, чтобы понять, что это не лучший способ подумать об отступлении.

Ответ 3

Три причины:

  • Повысить читаемость. Двоеточие помогает преобразовать код в следующий отложенный блок.
  • Чтобы помочь текстовым редакторам /IDE, они могут автоматически отступать от следующей строки, если предыдущая строка заканчивается двоеточием.
  • Сделать парсинг на python немного проще.

Ответ 4

Насколько я знаю, это намеренный дизайн, чтобы сделать его более очевидным, чтобы читатель мог ожидать отступы после двоеточия.

Он также делает такие конструкции такими, как это возможно:

if expression: action()
code_continues()

Обратите внимание (как заметил комментатор), что это не совсем блестящий золотой стандарт хорошего стиля Python. Было бы гораздо лучше иметь пробел:

if expression: action()

code_continues()

чтобы избежать путаницы. Я просто хотел пояснить в первом примере, что это можно написать так, поскольку наличие кода для if сразу после двоеточия позволяет компилятору понять, что следующая строка не должна быть отступом.

Ответ 5

Согласно Guido Van Rossum, изобретателю Python, идея использования двоеточия, чтобы сделать структуру более очевидной, вдохновлена более ранними экспериментами с предшественником Python, языком ABC, который также нацелился на новичков. По-видимому, на ранних тестах ученики-новички быстрее прогрессировали с помощью двоеточия, чем без него. Прочитайте всю историю в блоге истории сообщений python в Guido.

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

И да, двоеточие полезно в однострочных и менее раздражает, чем точка с запятой. Также руководство по стилю для долгого времени рекомендуется разбить на несколько строк только тогда, когда оно заканчивается двоичным оператором

x = (23 + 
     24 + 
     33)

Добавление комбинированного заявления с толстой кишкой выглядит одинаково для большей однородности стиля.

Существует "бескрайняя" кодировка для CPython, а также двоеточие без диалекта, называемое cobra. Те не подобрали.