М. Лутц - Изучаем Python (4-е издание)- 2011 (1126907), страница 96
Текст из файла (страница 96)
В ������������������������������������Python������������������������������ 2.6 допускается подобное смешивание. Однако эта версия интерпретатора имеет ключ -t командной строки,при использовании которого интерпретатор будет предупреждать о непосле-Синтаксические правила языка Python383довательном использовании символов табуляции, а при запуске с ключом -ttон будет считать ошибкой такое оформление программного кода (вы можетеуказывать эти ключи в командной строке при запуске своего сценария, например: python –t main.py).
Режим работы интерпретатора Python 3.0 эквивалентензапуску интерпретатора версии 2.6 с ключом -tt.Разделители инструкций:строки и многострочные инструкцииВ языке Python инструкция обычно заканчивается в конце строки. Однакоесли инструкция слишком велика, чтобы уместиться в одной строке, можноиспользовать следующие специальные правила размещения инструкции в нескольких строках:•• Инструкции могут располагаться в нескольких строках, если они окружены синтаксической парой скобок. Язык Python позволяет продолжить вводинструкции в следующей строке, когда содержимое инструкции заключенов пару скобок (), {} или []. Примерами инструкций, которые могут располагаться в нескольких строках, могут служить выражения в круглых скобках, литералы словарей и списков – инструкция не считается законченной,пока интерпретатор Python не встретит строку с закрывающей скобкой (), }или ]).
Промежуточные строки (вторая и последующие строки инструкции)могут иметь любые отступы, но желательно, чтобы вы обеспечили одинаковое выравнивание по вертикали для повышения удобочитаемости, еслиэто возможно. Это правило относится также к генераторам словарей и множеств в Python 3.0.•• Инструкции могут располагаться в нескольких строках, если они завершаются символом обратного слеша. Это несколько устаревшая особенность, но если необходимо разместить инструкцию в нескольких строках,можно в конец каждой предшествующей строки вставить символ обратногослеша, который будет служить признаком, что инструкция продолжаетсяна следующей строке.
Так как существует возможность использовать круглые скобки для заключения длинных конструкций, символы обратногослеша практически никогда не используются. При использовании такогоподхода легко допустить ошибку: обычно интерпретатор замечает отсутствие символа \ и выводит сообщение об ошибке, но если текущая и следующая строки могут интерпретироваться, как самостоятельные и независимые инструкции, ошибка не будет замечена, а результат может оказатьсянепредсказуемым.•• Литералы строк в тройных кавычках могут располагаться в несколькихстроках. Очень длинные строковые литералы можно разместить в нескольких строках – блоки строк в тройных кавычках, с которыми мы встретились в главе 7, предназначены именно для этих целей.
Там же, в главе 7, мыузнали, что к строковым литералам применяется неявная операция конкатенации – в соответствии с правилом скобок, упоминавшимся выше, использование круглых скобок позволит расположить несколько строковыхлитералов в разных строках.•• Другие правила. Существует еще несколько моментов, которые хотелось быупомянуть.
Хотя это и используется редко, инструкции можно завершатьточкой с запятой – иногда это соглашение применяется, чтобы компактноразместить несколько инструкций в одной строке. Кроме того, в любом ме-384Глава 12. Условная инструкция if и синтаксические правиласте в файле могут присутствовать пустые строки и комментарии. Комментарии (которые начинаются с символа #) простираются до конца строки.Несколько специальных случаевНиже показано, как выглядит инструкция при использовании правила использования скобок. Конструкции, заключенные в скобки, могут заниматьпроизвольное число строк:L = [“Good”,“Bad”,“Ugly”]# Пара скобок может охватывать несколько строкЭтот прием также можно использовать с круглыми скобками (выражения, аргументы функций, заголовки функций, кортежи и выражения-генераторы)и с фигурными скобками (словари, литералы множеств в версии 3.0, а такжегенераторы множеств и словарей).
С некоторыми из этих инструментов мы познакомимся в следующих главах, однако это правило охватывает большинствоконструкций, которые могут располагаться в нескольких строках.При желании можно использовать символы обратного слеша, но этот приемредко используется на практике:if a == b and c == d and \d == e and f == g:print(‘olde’)# Символы обратного слеша позволяют продолжить...Поскольку любое выражение можно заключить в круглые скобки, то лучшеиспользовать их, когда возникает необходимость расположить инструкциюв нескольких строках:if (a == b and c == d andd == e and e == f):print(‘new’)# Но круглые скобки позволяют то же самоеНа практике символы обратного слеша к использованию не рекомендуются,потому что они малозаметны и их легко пропустить по случайности. В следующем примере задача состояла в присваивании переменной x значения 10, еслиучесть наличие символа обратного слеша. Однако если обратный слеш случайно опустить, переменной x будет присвоено значение 6; при этом никаких сообщений об ошибке не появится (+4 – это допустимая инструкция выражения).В действующих программах подобная случайность в более сложных инструкциях присваивания могла бы привести к весьма неприятным проблемам:1x = 1 + 2 + 3 \+41# Отсутствие \ существенно изменяет смысл выраженияОткровенно говоря, меня очень удивило, что возможность использования символаобратного слеша таким способом не была ликвидирована в Python 3.0, особенно еслиучесть, насколько грандиозны были некоторые из изменений! (В табл. П.2, в предисловии, приводится список возможностей, которые были убраны в версии 3.0, – некоторые из них кажутся весьма безобидными по сравнению с опасностями, которыетаит в себе такое использование символа обратного слеша.) С другой стороны, цельэтой книги – изучение языка Python, а не популистские разглагольствования, поэтому я могу только посоветовать: не используйте эту возможность.385Проверка истинностиЕще один специальный случай: в языке Python допускается записыватьв одной строке несколько несоставных инструкций (то есть инструкций, которые не имеют вложенных инструкций), разделяя их точками с запятой.
Некоторые программисты используют эту возможность для экономии пространствав файле, однако удобочитаемость будет выше, если в каждой строке размещатьтолько одну инструкцию:x = 1; y = 2; print(x) # Несколько простых инструкций в одной строкеКак мы узнали в главе 7, строковые литералы в тройных кавычках также могут занимать несколько строк. Кроме того, если два строковых литерала следуют друг за другом, они объединяются, как если бы между ними стоял операторконкатенации +. Согласно правилу скобок, если несколько строковых литералов окружить круглыми скобками, их можно будет расположить в разныхстроках. В первом примере ниже между строками будет вставлен символ концастроки и переменной S будет присвоен результат ‘\naaaa\nbbbb \ncccc’, а во втором примере будет выполнена неявная операция конкатенации и переменнойS будет присвоена строка ‘aaaabbbbcccc’.
Во втором случае комментарии будутигнорироваться, а в первом они станут частью строки S:S = “””aaaabbbbcccc”””S = (‘aaaa’‘bbbb’‘cccc’)# Этот комментарий игнорируетсяИ наконец, Python позволяет располагать тело составной инструкции в однойстроке с заголовком при условии, что тело образует простая (несоставная) инструкция. Вам часто придется видеть следующий вариант использования простых инструкций с единственным условием и действием:if 1: print(‘hello’)# Простая инструкция в строке заголовкаЭти специальные случаи можно комбинировать между собой, чтобы писатьпрограммный код, который будет сложно читать, но я не рекомендую поступать так – старайтесь записывать по одной инструкции в строке и выравнивайте все блоки; исключение могут составлять только простейшие случаи. Когдавам придется вернуться к своей программе спустя полгода, вы будете рады, чтопоступали именно так.Проверка истинностиПонятия сравнения, равенства и значений истинности были введены в главе 9.Инструкция if – это первая инструкция на нашем пути, которая используетрезультаты проверки, поэтому здесь мы подробнее поговорим о некоторых изэтих идей.
В частности, о том, что логические операторы в языке Python несколько отличаются от аналогичных операторов в таких языках, как C. В языке Python:•• Любое число, не равное нулю, или непустой объект интерпретируется какистина.386Глава 12. Условная инструкция if и синтаксические правила•• Числа, равные нулю, пустые объекты и специальный объект None интерпретируются как ложь.•• Операции сравнения и проверки на равенство применяются к структурамданных рекурсивно.•• Операции сравнения и проверки на равенство возвращают значение Trueили False (которые представляют собой версии чисел 1 и 0).•• Логические операторы and и or возвращают истинный или ложный объектоперанд.В двух словах, логические операторы используются для объединения результатов других проверок. В языке Python существует три логических оператора:X and YИстина, если оба значения X и Y истинны.X or YИстина, если любое из значений X или Y истинно.not XИстина, значение X ложно (выражение возвращает значение True или False)Здесь X и Y могут быть любыми значениями истинности или выражениями,которые возвращают значения истинности (например, выражение проверкина равенство, сравнение с диапазоном значений и так далее).