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

  • Синтаксические правила языка Python

  • Несколько специальных случаев

  • [ ] or 3 3>>> [ ] or { }

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


    Скачать 4.86 Mb.
    Название3е издание
    АнкорМатематический анализ
    Дата04.02.2022
    Размер4.86 Mb.
    Формат файлаpdf
    Имя файлаpython_01.pdf
    ТипДокументы
    #351981
    страница39 из 98
    1   ...   35   36   37   38   39   40   41   42   ...   98
    choice = 'ham'
    >>> print {'spam': 1.25, # Инструкция 'switch' на базе словаря
    ... 'ham': 1.99, # Используйте has_key или get для
    ... 'eggs': 0.99, # значения по умолчанию
    ... 'bacon': 1.10}[choice]
    1.99
    Тем, кто такой прием видит впервые, может потребоваться некоторое время, чтобы осознать его; и тем не менее, данный словарь обеспечива
    ет множественное ветвление через индексирование по ключу choice для выбора одного из нескольких значений, почти так же, как это де
    лает инструкция switch в языке C. Эквивалентная, но менее компакт
    ная инструкция if в языке Python выглядит, как показано ниже:
    >>> if choice == 'spam':
    ... print 1.25
    ... elif choice == 'ham':
    ... print 1.99
    ... elif choice == 'eggs':
    ... print 0.99
    ... elif choice == 'bacon':
    ... print 1.10
    ... else:
    ... print 'Bad choice'

    318
    Глава 12. Условная инструкция if
    1.99
    Обратите внимание на часть else, которая предназначена для обработ
    ки ситуации, когда не найдено ни одного совпадения. Как было показа
    но в главе 8, значение по умолчанию при использовании словарей мо
    жет быть получено с помощью методов has_key и get или при перехвате исключения. Те же самые приемы могут использоваться и здесь – для определения действия по умолчанию в случае реализации множест
    венного ветвления на базе словаря. Ниже приводится пример с ис
    пользованием метода get для получения значения по умолчанию:
    >>> branch = {'spam': 1.25,
    ... 'ham': 1.99,
    ... 'eggs': 0.99}
    >>> print branch.get('spam', 'Bad choice')
    1.25
    >>> print branch.get('bacon', 'Bad choice')
    Bad choice
    Словари хорошо подходят для выбора значений, ассоциированных с ключами, но как быть в случае более сложных действий, которые можно запрограммировать в инструкциях if? В четвертой части книги вы узнаете, что словари также могут содержать функции, выполняю
    щие сложные действия при ветвлении, реализуя обычные таблицы пе
    реходов. В этом случае функции играют роль значений в словаре, час
    то создаются как лямбдафункции и вызываются добавлением круг
    лых скобок. Подробнее об этом вы прочитаете далее.
    Множественное ветвление на базе словаря довольно удобно использо
    вать в программах, которые имеют дело с динамическими данными,
    однако большинство программистов согласятся, что использование инструкции if является наиболее простым способом организации мно
    жественного ветвления. Обычно, при колебаниях при выборе того или иного подхода предпочтение следует отдавать более простому и более удобочитаемому.
    Синтаксические правила языка Python
    Первое знакомство с синтаксической моделью языка Python состоя
    лось в главе 10. Теперь, когда мы подошли к таким крупным инструк
    циям, как if, настало время пересмотреть и дополнить сведения о син
    таксисе, введенные ранее. Вообще язык программирования Python об
    ладает простым синтаксисом, основанным на применении инструк
    ций. Однако он обладает некоторыми особенностями, о которых вам необходимо знать:

    Инструкции выполняются последовательно, одна за другой, пока
    не будет предусмотрено что!то другое. Обычно интерпретатор вы
    полняет инструкции в файле или в блоке от начала до конца, но та

    Синтаксические правила языка Python
    319
    кие инструкции, как if (и, как будет показано далее, циклы), за
    ставляют интерпретатор выполнять переходы внутри программного кода. Так как путь интерпретатора Python через текст программы называется потоком управления, такие инструкции, как if, часто называются инструкциями управления потоком выполнения.

    Границы блоков и инструкций определяются автоматически. Как мы уже видели, в языке Python отсутствуют фигурные скобки или разделители «begin/end», окружающие блоки программного кода.
    Вместо этого принадлежность инструкций к вложенному блоку определяется по величине отступов. Так же инструкции в языке Py
    thon обычно не завершаются точкой с запятой; обычно признаком конца инструкции служит конец строки с этой инструкцией.

    Составные инструкции = заголовок, «:», инструкции с отступами.
    Все составные инструкции в языке Python оформляются одинако
    во: строка с заголовком завершается двоеточием, далее следуют од
    на или более вложенных инструкций, обычно с отступом относи
    тельно заголовка. Эти инструкции с отступами называются блоком
    (или иногда набором). В инструкции if предложения elif и else яв
    ляются не только частями инструкции if, но и заголовками с собст
    венными вложенными блоками.

    Пустые строки, пробелы и комментарии обычно игнорируются.
    Пустые строки игнорируются в файлах (но не в интерактивной обо
    лочке). Пробелы внутри инструкций и выражений игнорируются практически всегда (за исключением строковых литералов, а так
    же когда они используются для оформления отступов). Коммента
    рии игнорируются всегда: они начинаются с символа # (не внутри строковых литералов) и простираются до конца строки.

    Строки документирования игнорируются, но сохраняются и ото!
    бражаются специализированными инструментами. В языке Py
    thon поддерживается дополнительная форма комментариев, назы
    ваемая строками документирования, которые в отличие от коммен
    тариев, начинающихся с #, сохраняются для просмотра во время выполнения. Строки документирования – это обычные строки, ко
    торые располагаются в начале файлов с программами и в некото
    рых инструкциях. Интерпретатор игнорирует их содержимое, но они автоматически присоединяются к объектам во время выполне
    ния и могут отображаться инструментами доступа к документации.
    Строки документирования являются частью стратегии документи
    рования в языке Python и будут рассматриваться в последней главе этой части книги.
    Как уже говорилось ранее, в языке Python отсутствует необходимость объявлять типы переменных – только один этот факт упрощает син
    таксис языка больше, чем любые другие особенности. Но для большин
    ства новых пользователей самой необычной особенностью синтаксиса языка Python кажется отсутствие фигурных скобок и точек с запятой,

    320
    Глава 12. Условная инструкция if используемых в качестве разделителей блоков и инструкций во мно
    гих других языках, поэтому давайте рассмотрим их поближе.
    Разделители блоков
    Интерпретатор автоматически определяет границы блоков по величи
    не отступов – т. е. по ширине пустого пространства слева от программ
    ного кода. Все инструкции, смещенные вправо на одинаковое расстоя
    ние, принадлежат к одному и тому же блоку кода. Другими словами,
    инструкции в блоке выстроены по вертикальной линии. Блок закан
    чивается либо с концом файла, либо как только встретится строка с меньшим отступом; более глубоко вложенные блоки имеют более широкие отступы, чем инструкции в объемлющем блоке.
    Например, на рис. 12.1 показана структура блоков следующего фраг
    мента программного кода:
    x = 1
    if x:
    y = 2
    if y:
    print 'block2'
    print 'block1'
    print 'block0'
    Данный фрагмент содержит три блока: первый (программный код верхнего уровня) вообще не имеет отступов, второй (внутри внешней инструкции if) имеет отступ из четырех пробелов и третий (инструк
    ция print внутри вложенной инструкции if) имеет отступ из восьми пробелов.
    Рис. 12.1. Вложенные блоки программного кода: вложенный блок начинается
    с инструкции, имеющей больший отступ, и заканчивается либо когда будет
    встречена инструкция с меньшим отступом, либо в конце файла
    Заголовок:
    Заголовок:
    Блок 0
    Блок 0
    Блок 2
    Блок 1
    Блок 1

    Синтаксические правила языка Python
    321
    Вообще программный код верхнего уровня (не вложенный) должен на
    чинаться в строках с позиции 1. Вложенные блоки могут начинаться с любой позиции – отступ может состоять из любого числа пробелов и символов табуляции, главное, чтобы все инструкции в одном блоке имели одинаковые отступы. То есть для интерпретатора неважно, как
    будут оформляться отступы, главное, чтобы оформление было непроти
    воречивым. С технической точки зрения считается, что символ табуля
    ции смещает текущую позицию в строке на восемь пробелов, но обычно не принято смешивать символы табуляции и пробелы внутри блока –
    используйте чтото одно – или пробелы, или символы табуляции.
    Единственное, где в языке Python пробелы имеют большое значение, –
    это когда они находятся левее программного кода; в большей части других случаев неважно, есть пробелы или нет. При этом отступы яв
    ляются частью синтаксиса языка, а не просто оформлением: все инст
    рукции внутри любого заданного блока должны иметь одинаковые от
    ступы, в противном случае интерпретатор сообщит о синтаксической ошибке. Так как вам не требуется явно отмечать начало и конец вло
    женного блока, различные синтаксические элементы, которые можно найти в других языках, в языке Python не нужны.
    Отступы, как часть синтаксической модели, стали важным компонен
    том обеспечения удобочитаемости в языках структурного программи
    рования, таких как Python. Иногда синтаксис языка Python описыва
    ют фразой «what you see is what you get» (что видишь, то и получаешь) –
    отступ каждой строки однозначно говорит, к какому блоку она при
    надлежит. Такой непротиворечивый внешний вид программного кода на языке Python обеспечивает простоту его сопровождения и много
    кратного использования.
    Программный код, в котором отступы оформлены непротиворечивым образом, всегда будет соответствовать правилам языка Python. Кроме того, многие текстовые редакторы (включая IDLE) упрощают следова
    ние модели отступов, автоматически выравнивая программный код по мере его ввода.
    Разделители инструкций
    В языке Python инструкция обычно заканчивается в конце строки. Од
    нако, если инструкция слишком велика, чтобы уместиться в одной строке, можно использовать следующие специальные правила разме
    щения инструкции в нескольких строках:

    Инструкции могут располагаться в нескольких строках, если они
    окружены синтаксической парой скобок. Язык Python позволяет продолжить ввод инструкции в следующей строке, когда содержи
    мое инструкции заключено в пару скобок (), {} или []. Примерами инструкций, которые могут располагаться в нескольких строках,
    могут служить выражения в круглых скобках, литералы словарей и списков – инструкция не считается законченной, пока интерпре

    322
    Глава 12. Условная инструкция if татор Python не встретит строку с закрывающей скобкой (), } или ]).
    Промежуточные строки могут иметь любые отступы и не обязатель
    но должны быть выровнены по вертикали.

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

    Литералы строк в тройных кавычках могут располагаться в не!
    скольких строках. Очень длинные строковые литералы можно раз
    местить в нескольких строках – блоки строк в тройных кавычках,
    с которыми мы встретились в главе 7, предназначены именно для этих целей.

    Другие правила. Существует еще несколько моментов, которые хо
    телось бы упомянуть. Хотя это и необычно, инструкции можно за
    вершать точкой с запятой – иногда это соглашение используется,
    чтобы компактно разместить несколько инструкций в одной стро
    ке. Кроме того, в любом месте в файле могут присутствовать пустые строки и комментарии. Комментарии (которые начинаются с сим
    вола #) простираются до конца строки.
    Несколько специальных случаев
    Ниже показано, как выглядит инструкция при применении правила использования скобок. Конструкции, заключенные в скобки, могут занимать произвольное число строк:
    L = ["Good",
    "Bad",
    "Ugly"] # Открытая пара скобок может охватывать несколько строк
    Этот прием также можно использовать с круглыми скобками: выраже
    ния, аргументы функций, заголовки функций (глава 15) и т. д. При желании можно использовать символы обратного слеша, но этот при
    ем редко используется на практике:
    if a == b and c == d and \
    d == e and f == g:
    print 'olde' # Символы обратного слеша позволяют продолжить...
    Поскольку любое выражение можно заключить в круглые скобки, то лучше использовать их при необходимости расположить инструкцию в нескольких строках:
    if (a == b and c == d and d == e and e == f):

    Проверка истинности
    323
    print 'new' # Но круглые скобки позволяют то же самое
    Еще один специальный случай: в языке Python допускается записы
    вать в одной строке несколько несоставных инструкций (т. е. инструк
    ций, которые не имеют вложенных инструкций), разделяя их точками с запятой. Некоторые программисты используют эту возможность для экономии пространства в файле, однако удобочитаемость будет выше,
    если в каждой строке размещать только одну инструкцию:
    x = 1; y = 2; print x # Несколько простых инструкций в одной строке
    И, наконец, Python позволяет располагать тело составной инструкции в одной строке с заголовком при условии, что тело образует простая
    (несоставная) инструкция. Вам часто придется видеть следующий ва
    риант использования простых инструкций с единственным условием и действием:
    if 1: print 'hello' # Простая инструкция в строке заголовка
    Некоторые из этих специальных случаев можно комбинировать меж
    ду собой, чтобы писать программный код, который будет сложно чи
    тать, но я не рекомендую поступать так – старайтесь записывать по од
    ной инструкции в строке и выравнивайте все блоки, кроме простей
    ших. Когда вам придется вернуться к своей программе спустя полго
    да, вы будете рады, что поступали именно так.
    Проверка истинности
    Понятия сравнения, равенства и значений истинности были введены в главе 9. Инструкция if – это первая инструкция на нашем пути, ко
    торая использует результаты проверки, поэтому здесь мы подробнее поговорим о некоторых из этих идей. В частности о том, что логиче
    ские операторы в языке Python несколько отличаются от аналогичных операторов в таких языках как C. В языке Python:

    Любое число, не равное нулю, или непустой объект интерпретиру
    ется как истина.

    Числа, равные нулю, пустые объекты и специальный объект None интерпретируются как ложь.

    Операции сравнения и равенства применяются к структурам дан
    ных рекурсивно.

    Операции сравнения и равенства возвращают значение True или
    False
    (которые представляют собой версии чисел 1 и 0).

    Логические операторы and и or возвращают истинный или ложный объектоперанд.
    В двух словах, логические операторы используются для объединения результатов других проверок. В языке Python существует три логиче
    ских оператора:

    324
    Глава 12. Условная инструкция if
    X and Y
    Истина, если оба значения X и Y истинны.
    X or Y
    Истина, если любое из значений X или Y истинно.
    not X
    Истина, значение X ложно (выражение возвращает значение True или False)
    Здесь X и Y могут быть любыми значениями истинности или выраже
    ниями, которые возвращают значения истинности (например, выра
    жение проверки равенства, сравнение с диапазоном значений и т. д.).
    В языке Python логические операторы имеют вид слов (вместо обозна
    чений &&, || и !, как это реализовано в языке C). Кроме того, логиче
    ские операторы and и or возвращают истинный или ложный объект,
    а не значение True или False. Рассмотрим несколько примеров, чтобы понять, как они работают:
    >>> 2 < 3, 3 < 2 # Меньше чем: возвращает 1 или 0
    (True, False)
    Операция сравнения величин, как в данном случае, возвращает в ка
    честве результата значение True или False, которые, как мы узнали в главах 5 и 9, в действительности являются особыми версиями целых чисел 1 и 0 (выводятся они особым образом, а во всем остальном явля
    ются обычными числами).
    С другой стороны, операторы and и or всегда возвращают объект – объ
    ект либо слева от оператора, либо справа. Если действие этих операто
    ров проверяется инструкцией if или другими инструкциями, они бу
    дут иметь ожидаемый результат (не забывайте, что каждый объект мо
    жет интерпретироваться как истина или как ложь), но это не будут простые значения True или False.
    В случае оператора or интерпретатор начинает вычислять значения объектовоперандов слева направо и возвращает первый, имеющий ис
    тинное значение. Кроме того, интерпретатор прекратит дальнейшие вычисления, как только будет найден первый объект, имеющий ис
    тинное значение. Это обычно называют вычислением по короткой схе+
    ме
    , так как конечный результат становится известен еще до вычисле
    ния остальной части выражения:
    >>> 2 or 3, 3 or 2 # Вернет левый операнд, если он имеет истинное значение
    (2, 3) # Иначе вернет правый операнд (истинный или ложный)
    >>> [ ] or 3
    3
    >>> [ ] or { }
    { }
    В первой строке предыдущего примера оба операнда (2 и 3) имеют ис
    тинные (т. е. ненулевые) значения, поэтому интерпретатор всегда бу

    Проверка истинности
    325
    дет останавливать вычисления и возвращать операнд слева. В других двух операциях левый операнд имеет ложное значение (пустой объ
    ект), поэтому интерпретатор просто вычисляет и возвращает объект справа (который может иметь как истинное, так и ложное значение).
    Вычисление оператора and также останавливается, как только резуль
    тат станет известен, однако в этом случае интерпретатор вычисляет операнды слева направо и возвращает первый объект, имеющий лож+
    ное
    значение:
    >>>
    1   ...   35   36   37   38   39   40   41   42   ...   98


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