Главная страница
Навигация по странице:

  • Что добавляет язык Python

  • Круглые скобки необязательны

  • Конец строки является концом инструкции

  • Конец отступа – это конец блока

  • Почему отступы являются частью синтаксиса

  • Несколько специальных случаев Как уже упоминалось ранее, в синтаксической модели языка Python:•

  • Специальные случаи оформления инструкций

  • Специальный случай оформления блока

  • Математический анализ. 3е издание


    Скачать 4.86 Mb.
    Название3е издание
    АнкорМатематический анализ
    Дата04.02.2022
    Размер4.86 Mb.
    Формат файлаpdf
    Имя файлаpython_01.pdf
    ТипДокументы
    #351981
    страница34 из 98
    1   ...   30   31   32   33   34   35   36   37   ...   98
    Инструкция
    Роль
    Пример

    276
    Глава 10. Введение в инструкции языка Python
    Рассмотрим следующую условную инструкцию на языке C:
    if (x > y) {
    x = 1;
    y = 2;
    }
    Это могла бы быть инструкция на языке C, C++, Java, JavaScript или
    Perl. А теперь взгляните на эквивалентную инструкцию на языке Py
    thon:
    if x > y:
    x = 1
    y = 2
    Первое, что бросается в глаза, – инструкция на языке Python выгля
    дит компактнее, точнее, в ней меньше синтаксических элементов. Это соответствует основным принципам языка; так как Python – это язык сценариев, его основная цель состоит в том, чтобы облегчить жизнь программистам за счет меньшего объема ввода с клавиатуры.
    Если быть более точным, то, сравнив две синтаксических модели,
    можно заметить, что язык Python один новый элемент добавляет, а три элемента, которые присутствуют в языках, подобных языку C, ликви
    дирует.
    Что добавляет язык Python
    Один из новых синтаксических элементов в языке Python – это символ двоеточия (:). Все составные инструкции в языке Python (т. е. инст
    рукции, которые включают вложенные в них инструкции) записыва
    ются в соответствии с одним и тем же общим шаблоном, когда основ
    ная инструкция завершается двоеточием, вслед за которым располага
    ется вложенный блок кода, обычно с отступом под строкой основной инструкции, как показано ниже:
    Основная инструкция:
    Вложенный блок инструкций
    Двоеточие является обязательным, а его отсутствие является самой рас
    пространенной ошибкой, которую допускают начинающие программи
    сты, – я встречал тысячи подтверждений этому в учебных классах.
    Фактически, если вы плохо знакомы с языком Python, то вы почти на
    верняка очень скоро забудете о символе двоеточия. Большинство тек
    стовых редакторов, обладающих функцией подсветки синтаксиса, де
    лают эту ошибку легко заметной, а с опытом вырабатывается привычка вставлять двоеточие бессознательно (да так, что вы начинаете вводить двоеточие в программный код на языке C++, что приводит к большому числу весьма интересных сообщений об ошибках от компилятора C++!).

    История о двух if
    277
    Что Python устраняет
    Хотя Python требует ввода дополнительного символа двоеточия, суще
    ствуют три элемента, обязательных для языков, подобных языку C,
    которые языку Python не требуются.
    Круглые скобки необязательны
    Первый элемент – это пара круглых скобок, окружающих условное выражение в основной инструкции:
    if (x < y)
    Круглые скобки здесь являются обязательными во многих Cподоб
    ных языках. В языке Python это не так – мы просто можем опустить скобки, и инструкция будет работать точно так же:
    if x < y
    Точнее говоря, так как каждое выражение может быть заключено в скобки, присутствие их не будет противоречить синтаксису языка
    Python, и они не будут считаться ошибкой. Но не делайте этого: вы лишь понапрасну будете изнашивать свою клавиатуру, а окружаю
    щим сразу будет видно, что вы – бывший программист, использовав
    ший язык C, еще только изучающий язык Python (когдато и я был та
    ким же). Стиль языка Python состоит в том, чтобы вообще опускать скобки в подобных инструкциях.
    Конец строки является концом инструкции
    Второй, еще более важный синтаксический элемент, который вы не найдете в программном коде на языке Python, – это точка с запятой.
    В языке Python не требуется завершать инструкции точкой с запятой,
    как это делается в Cподобных языках:
    x = 1;
    Общее правило в языке Python гласит, что конец строки автоматиче
    ски считается концом инструкции, стоящей в этой строке. Другими словами, вы можете отбросить точку с запятой и инструкция будет ра
    ботать точно так же:
    x = 1
    Существует несколько способов обойти это правило, с которыми вы вскоре познакомитесь. Но в общем случае большая часть программно
    го кода на языке Python пишется по одной инструкции в строке, и то
    гда точка с запятой не требуется.
    В данном случае, если вы скучаете по тем временам, когда программи
    ровали на языке C (если такое состояние вообще возможно…), можете продолжать вставлять точки с запятой в конце каждой инструкции –
    синтаксис языка допускает это. Но не делайте этого: потому что если вы будете поступать так, окружающим сразу будет видно, что вы ос
    таетесь программистом на языке C, который никак не может переклю

    278
    Глава 10. Введение в инструкции языка Python читься на использование языка Python. Стиль языка Python состоит в том, чтобы вообще опускать точки с запятой.
    1
    Конец отступа – это конец блока
    Теперь третий, и последний, синтаксический компонент, который уда
    ляет Python, и возможно, самый необычный для недавних exСпро
    граммеров (пока они не поработают с Python 10 минут и не поймут, что в действительности это является достоинством языка), – вы не вводите ничего специально в ваш код, чтобы синтаксически пометить начало и конец вложенного блока кода. Вам не нужно вставлять begin/end,
    then
    /endif или фигурные скобки вокруг вложенных блоков
    2
    , как это делается в Cподобных языках:
    if (x > y) {
    x = 1;
    y = 2;
    }
    Для этих целей в языке Python используются отступы, когда все инст
    рукции в одном и том же вложенном блоке оформляются с одинако
    выми отступами от левого края. По величине отступа интерпретатор определяет, где находится начало блока и где – конец:
    if x > y:
    x = 1
    y = 2
    Под отступами (indentation) в данном примере я подразумеваю пус
    тое пространство слева от двух вложенных инструкций. Интерпрета
    тор не накладывает ограничений на то, как выполняются отступы (для этого можно использовать символы пробела или символы табуляции),
    и на величину отступов (допускается использовать любое число пробе
    лов или символов табуляции). При этом отступ для одного вложенного блока может существенно отличаться от отступа для другого блока.
    Синтаксическое правило состоит лишь в том, что все инструкции в пре
    делах одного блока должны иметь один и тот же отступ от левого края.
    Если это не так, будет получена синтаксическая ошибка, и программ
    ный код не будет работать, пока вы не исправите отступ.
    Почему отступы являются частью синтаксиса?
    Правило оформления отступов может показаться необычным на пер
    вый взгляд для программистов, работавших с Cподобными языками
    1
    Кстати, в JavaScript также можно не ставить точку с запятой в конце стро
    ки, но широко распространена традиция ставить такой ограничитель, де
    монстрируя тем самым как раз хороший стиль оформления программного кода. – Примеч. науч. ред.
    2
    Известна программистская шутка, уместная в этом контексте: это не bug,
    это feature. – Примеч. науч. ред.

    История о двух if
    279
    программирования, но это было сделано преднамеренно и является од
    ним из основных способов, которыми язык Python вынуждает про
    граммистов писать однородный и удобочитаемый программный код.
    По существу это означает, что вы должны выстраивать свой программ
    ный код вертикально, выравнивая его в соответствии с логической структурой. В результате получается менее противоречивый и более удобочитаемый программный код (в отличие от большей части кода,
    написанного на Cподобных языках).
    Требования к выравниванию программного кода в соответствии с его логической структурой – это главная составляющая, способствующая созданию удобочитаемого кода, и, следовательно, кода, пригодного к многократному использованию и простого в сопровождении как ва
    ми, так и другими. Фактически, даже если ранее вы никогда не ис
    пользовали Python, после прочтения этой книги у вас должна вырабо
    таться привычка оформлять отступы в программном коде для удобо
    читаемости в любом языке программирования. Язык Python вносит определенные ограничения, сделав отступы частью синтаксиса, но они достаточно важны для любого языка программирования и оказы
    вают огромное влияние на применимость вашего программного кода.
    Ваш опыт может отличаться от моего, но когда я занимался разработ
    кой полный рабочий день, мне платили зарплату за работу над круп
    ными старыми программами, написанными на языке C++, над кото
    рыми долгие годы трудились множество программистов. Практически у каждого программиста был свой стиль оформления программного кода. Например, мне часто приходилось изменять циклы while, напи
    санные на языке C++, которые начинались примерно так:
    while (x > 0) {
    Даже еще не дойдя до отступов, мы можем столкнуться с тремя или четырьмя способами расстановки фигурных скобок в Cподобных язы
    ках. В организациях часто ведутся жаркие споры и пишутся стандар
    ты по оформлению исходных текстов программ (обсуждение которых сильно выходит за рамки проблем, которые решаются в процессе про
    граммирования). Оставим этот вопрос в стороне, ниже приводится пример оформления, с которым мне часто приходилось сталкиваться в программном коде на языке C++. Первый программист, который по
    работал над этим циклом, оформлял отступы четырьмя пробелами:
    while (x > 0) {
    ;
    ;
    Со временем этот программист был переведен на руководящую долж
    ность, и его место занял другой, который предпочитал использовать более широкие отступы: while (x > 0) {
    ;

    280
    Глава 10. Введение в инструкции языка Python
    ;
    ;
    ;
    Позднее и он ушел на другую работу, а его место занял третий, которо
    му не нравилось делать отступы:
    while (x > 0) {
    ;
    ;
    ;
    ;
    ;
    ;
    }
    И так далее. В конце блок завершается закрывающей фигурной скоб
    кой (}), которая и делает этот фрагмент структурированным (о чем можно говорить с определенной долей сарказма). В любом блочно
    структурированном языке программирования, будь то Python или другой язык, если вложенные блоки не имеют непротиворечивых от
    ступов, их очень сложно читать, изменять и приспосабливать для мно
    гократного использования. Отступ – это важная составляющая под
    держки удобочитаемости.
    Ниже приводится другой пример, на котором, возможно, вам прихо
    дилось обжечься, если вы достаточно много программировали на Cпо
    добном языке. Взгляните на следующие инструкции языка C:
    if (x)
    if (y)
    statement1;
    else statement2;
    К какому оператору if относится инструкция else? Это удивительно,
    но инструкция else относится к вложенному оператору if – (if(y)), да
    же при том, что визуально она выглядит так, как если бы относилась к внешнему оператору if – (if(x)). Это классическая ловушка языка C
    и она может привести к неправильному пониманию программного ко
    да тем, кто его изменяет, и к появлению ошибок при его изменении,
    которые будут обнаружены, только когда марсоход врежется в скалу!
    Такого не может произойти в языке Python, потому что отступы для не
    го имеют важное значение и программный код работает именно так,
    как выглядит. Взгляните на эквивалентный фрагмент на языке Python:
    if x:
    if y:
    statement1
    else:
    statement2

    История о двух if
    281
    В этом примере инструкции if и else, расположенные на одной верти
    кальной линии, связаны логически (внешний оператор if x). В некото
    ром смысле Python – это язык типа WYSIWYG (What You See Is What
    You Get – что видишь, то и получаешь) – что вы видите, то и получаете,
    потому что порядок оформления программного кода определяет поря
    док его выполнения независимо от предпочтений того, кто его пишет.
    Если этого недостаточно, чтобы осознать преимущества синтаксиса языка Python, приведу одну историю. В начале своей карьеры я рабо
    тал в одной благополучной компании, занимавшейся разработкой про
    граммных систем на языке C, который вообще не предъявляет ника
    ких требований к оформлению отступов. Но, несмотря на это, когда в конце рабочего дня мы отправляли свой программный код в репози
    тарий, он автоматически проверялся сценарием, анализировавшим оформление отступов. Если сценарий обнаруживал несоответствия, на следующий день утром мы получали электронные письма с замеча
    ниями – и такой порядок завели наши начальники!
    По моему мнению, даже если язык программирования и не требует это
    го, хороший программист должен понимать, какое важное значение имеет выравнивание для удобочитаемости и высокого качества про
    граммного кода. Тот факт, что в языке Python отступы были возведены в ранг синтаксиса, по большей части выглядит как достоинство языка.
    Наконец, имейте в виду, что практически любой текстовый редактор с дружественным (для программистов) интерфейсом обладает встроен
    ной поддержкой синтаксической модели языка Python. В Pythonсреде разработки IDLE, например, отступы оформляются автоматически
    1
    ,
    когда начинается ввод вложенного блока; нажатие клавиши Backspace
    (забой) возвращает на один уровень вложенности выше, а кроме того,
    IDLE позволяет настроить величину отступов во вложенном блоке.
    Нет никаких стандартных требований к оформлению отступов: чаще всего используются четыре пробела или один символ табуляции на ка
    ждый уровень вложенности; вам самим решать, какой ширины отсту
    пы вы будете использовать. Выполняйте отступ вправо, чтобы открыть вложенный блок, и возвращайтесь на предыдущий уровень, чтобы за
    крыть его. Кроме того, на практике замена фигурных скобок символа
    ми табуляции является достаточно простой задачей для инструмен
    тальных средств, которые должны выводить программный код на язы
    ке Python. Вообще, делайте все то же, что вы делаете на языке C, но
    1
    Напомним, IDLE – среда разработки, специально созданная Guido van Ros
    sum в проекте Python. Первый релиз вышел вместе с версией Python 1.5.2.
    Одно из объяснений использования такого слова (idle – бездействующий, ле
    нивый), в отличие от принятого в других языковых средах термина IDE, объ
    явлено на сайте python.org (http://www.python.org/idle/doc/idlemain.html)
    и выглядит так: «IDLE – это акроним от Integrated DeveLopment Environ
    ment». См. также главу 3. – Примеч. науч. ред.

    282
    Глава 10. Введение в инструкции языка Python уберите фигурные скобки и ваш программный код будет удовлетво
    рять правилам синтаксиса языка Python.
    Несколько специальных случаев
    Как уже упоминалось ранее, в синтаксической модели языка Python:

    Конец строки является концом инструкции, расположенной в этой строке (точка с запятой не требуется).

    Вложенные инструкции объединяются в блоки по величине отсту
    пов (без фигурных скобок).
    Эти правила охватывают большую часть программного кода на языке
    Python, который вы будете писать или с которым придется столкнуть
    ся. Однако существуют некоторые специальные правила, которые каса
    ются оформления как отдельных инструкций, так и вложенных блоков.
    Специальные случаи оформления инструкций
    Обычно на каждой строке располагается одна инструкция, но вполне возможно для большей компактности записать несколько инструкций в одной строке, разделив их точками с запятой:
    a = 1; b = 2; print a + b # Три инструкции на одной строке
    Это единственный случай, когда в языке Python необходимо использо
    вать точки с запятой: как разделители инструкций. Однако такой подход не может применяться к составным инструкциям. Другими словами, в одной строке можно размещать только простые инструк
    ции, такие как присваивание, print и вызовы функций. Составные ин
    струкции попрежнему должны находиться в отдельной строке (иначе всю программу можно было бы записать в одну строку, что, скорее все
    го, не нашло бы понимания у ваших коллег!).
    Другое специальное правило, применяемое к инструкциям, по сути является обратным к предыдущему: допускается записывать одну ин
    струкцию в нескольких строках. Для этого достаточно заключить часть инструкции в пару скобок – круглых (()), квадратных ([]) или фигурных ({}). Любой программный код, заключенный в одну из этих конструкций, может располагаться на нескольких строках: инструк
    ция не будет считаться законченной, пока интерпретатор Python не достигнет строки с закрывающей скобкой. Например, литерал списка можно записать так:
    mlist = [111,
    222,
    333]
    Так как программный код заключен в пару квадратных скобок, интер
    претатор всякий раз переходит на следующую строку, пока не обнару
    жит закрывающую скобку. Словари также могут располагаться в не
    скольких строках, а с помощью круглых скобок можно оформить мно

    История о двух if
    283
    гострочные кортежи, вызовы функций и выражения. Отступы в стро
    ках, где продолжается инструкция, в учет не принимаются, хотя здравый смысл диктует, что строки всетаки должны иметь некоторые отступы для обеспечения удобочитаемости.
    Круглые скобки являются самым универсальным средством, потому что в них можно заключить любое выражение. Добавьте левую скоб
    ку, и вы сможете перейти на следующую строку и продолжить свою инструкцию:
    X = (A + B +
    C + D)
    Между прочим, такой прием допускается применять и к составным инструкциям. Если вам требуется записать длинное выражение, обер
    ните его круглыми скобками и продолжите на следующей строке:
    if (A == 1 and
    B == 2 and
    C == 3):
    print 'spam' * 3
    Еще одно старое правило также позволяет переносить инструкцию на следующую строку: если предыдущая строка заканчивается символом обратного слеша:
    X = A + B + \
    C + D
    Но это устаревшее правило, которое не рекомендовано к использова
    нию в новых программах, потому что символы обратного слеша мало
    заметны и ненадежны (не допускается наличие какихлибо других символов после символа обратного слеша). Кроме того, это рассматри
    вается как пережиток языка C, где очень часто используются макро
    определения #define; в Питонляндии нужно все делать так, как это де
    лают питонисты, а не как программисты на языке C.
    Специальный случай оформления блока
    Как уже говорилось выше, инструкции во вложенном блоке обычно объединяются по величине отступа. Специальный случай: тело состав
    ной инструкции может располагаться в той же строке, что и основная инструкция, после символа двоеточия:
    if x > y: print x
    Это позволяет записывать в одной строке условные операторы, циклы и т. д. Однако такой прием будет работать, только если тело составной инструкции не содержит других составных инструкций. То есть после двоеточия могут следовать только простые инструкции – инструкции присваивания, инструкции print, вызовы функций и подобные им.
    Крупные инструкции попрежнему должны записываться в отдель
    ных строках. Дополнительные части составных инструкций (такие

    1   ...   30   31   32   33   34   35   36   37   ...   98


    написать администратору сайта