Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 82
Текст из файла (страница 82)
Инструкции языка PythonИнструкцияРольПримерПрисваиваниеСоздание ссылокa, *b = ‘good’, ‘bad’, ‘ugly’Вызовы и другиевыраженияЗапуск функцийlog.write(“spam, ham”)Вызов функцииprintВывод объектовprint(‘The Killer’, joke)if/elif/elseОперация выбораif “python” in text:print(text)for/elsewhile/elsepassbreakОбход последовательности в циклеfor x in mylist:Циклы общего назначенияwhile X > Y:Пустая инструкциязаполнительwhile True:Выход из циклаwhile True:print(x)print(‘hello’)passif exittest(): breakcontinueПереход в начало циклаwhile True:defСоздание функцийи методовdef f(a, b, c=1, *d):Возврат результатаdef f(a, b, c=1, *d):if skiptest(): continuereturnprint(a+b+c+d[0])return a+b+c+d[0]325Структура программы на языке PythonИнструкцияРольПримерyieldФункции-генераторыdef gen(n):for i in n: yield i*2globalПространства именx = ‘old’def function():global x, y; x = ‘new’nonlocalПространства имен (3.0+) def outer():x = ‘old’def function():nonlocal x; x = ‘new’importДоступ к модулямimport sysfromДоступ к атрибутаммодуляfrom sys import stdinclassСоздание объектовclass Subclass(Superclass):staticData = []def method(self): passtry/except/finally Обработка исключенийtry:action()except:print(‘action error’)raiseВозбуждение исключений raise endSearch(location)assertОтладочные проверкиassert X > Y, ‘X too small’with/asМенеджеры контекста(2.6+)with open(‘data’) as myfile:delУдаление ссылокdel data[k]process(myfile)del data[i:j]del obj.attrdel variableВ���������������������������������������������������������������������������табл������������������������������������������������������������������������������������������������������������������������������������������������. ��������������������������������������������������������������������10.1 перечислены разновидности инструкций в версии Python���������������������������� 3.0 – элементы программного кода, каждый из которых имеет свой характерный синтаксис и назначение.
Ниже приводятся несколько замечаний к таблице:•• Инструкции присваивания могут принимать различные синтаксическиеформы, которые описываются в главе 11: простое, присваивание последовательностей, комбинированное присваивание и другие.•• В версии 3.0 print не является ни зарезервированным словом, ни инструкцией – это встроенная функция. Однако она практически всегда выполняется как инструкция (то есть занимает отдельную строку в программе),326Глава 10. Введение в инструкции языка Pythonпоэтому ее обычно воспринимают как инструкцию. Мы поближе познакомимся с функцией print в главе 11.•• Начиная с версии 2.5 yield в действительности является выражением, а неинструкцией. Как и функция print, это выражение обычно занимает отдельную строку, и потому оно было включено в табл. 10.1.
Однако иногдав сценариях выполняется присваивание этой инструкции или извлечениерезультата из нее, как будет показано в главе 20. Кроме того, в отличие отprint, имя yield является зарезервированным словом.Большая часть инструкций, перечисленных в табл. 10.1, также имеется в версии Python�������������������������������������������������������������������������������������������������������������������������������������� 2.6.
Ниже приводятся несколько замечаний для тех, кто пользуется Python 2.6 или более ранними версиями:•• В версии 2.6 инструкция nonlocal недоступна. Как мы увидим в главе 17,существуют другие способы добиться того же эффекта в отношении присваивания значений переменным.•• В версии 2.6 print является не функцией, а инструкцией со своим характерным синтаксисом, который описывается в главе 11.•• exec (в версии 3.0 – встроенная функция, позволяющая выполнять фрагменты программного кода) в версии 2.6 также является инструкцией сосвоим характерным синтаксисом. Так как она поддерживает возможностьзаключения аргументов в круглые скобки, в версии 2.6 ее можно использовать как функцию.•• В версии 2.5 инструкции try/except и try/finally были объединены: ранееэто были две самостоятельные инструкции, но теперь мы можем использовать предложения except и finally одновременно, в одной инструкции try.•• В версии 2.5 инструкция with/as была необязательным расширением, и онабыла недоступна, если в программный код не включить инструкцию from__future__ import with_statement (глава 33).История о двух ifОднако прежде чем углубиться в детали какой-либо конкретной инструкциииз табл. 10.1, я хочу обратить ваше внимание на синтаксис инструкций в языкеPython, показав, как не надо писать программный код, чтобы у вас была возможность сравнить его с другими синтаксическими моделями, которые, возможно, вы видели ранее.Рассмотрим следующую условную инструкцию на языке C:if (x > y) {x = 1;y = 2;}Это могла бы быть инструкция на языке ����������������������������������������C���������������������������������������, �������������������������������������C������������������������������������++, ��������������������������������Java����������������������������, ��������������������������JavaScript����������������или �����������Perl�������.
А теперь взгляните на эквивалентную инструкцию на языке Python:if x > y:x = 1y = 2История о двух if327Первое, что бросается в глаза, – инструкция на языке ��������������������Python��������������выглядит компактнее, точнее, в ней меньше синтаксических элементов. Это соответствуетосновным принципам языка; так как Python������������������������������������������������������������������������ – это язык сценариев, его основная цель состоит в том, чтобы облегчить жизнь программистам за счет меньшего объема ввода с клавиатуры.Если быть более точным, то, сравнив две синтаксических модели, можно заметить, что язык Python один новый элемент добавляет, а три элемента, которыеприсутствуют в языках, подобных языку C, ликвидирует.Что добавляет язык PythonОдин из новых синтаксических элементов в языке �������������������������Python������������������� – это символ двоеточия (:).
Все составные инструкции в языке Python��������������������������������������������������������(то есть инструкции, которые включают вложенные в них инструкции) записываются в соответствиис одним и тем же общим шаблоном, когда основная инструкция завершаетсядвоеточием, вслед за которым располагается вложенный блок кода, обычнос отступом под строкой основной инструкции, как показано ниже:Основная инструкция:Вложенный блок инструкцийДвоеточие является обязательным, а его отсутствие является самой распространенной ошибкой, которую допускают начинающие программисты, –я встречал тысячи подтверждений этому в учебных классах. Фактическиесли вы плохо знакомы с языком Python, то вы почти наверняка очень скорозабудете о символе двоеточия.
Большинство текстовых редакторов, обладающих функцией подсветки синтаксиса, делают эту ошибку легко заметной, а сопытом вырабатывается привычка вставлять двоеточие бессознательно (датак, что вы начинаете вводить двоеточие в программный код на языке C++,что приводит к большому числу весьма интересных сообщений об ошибках откомпилятора C++!).Что Python устраняетХотя Python требует ввода дополнительного символа двоеточия, существуюттри элемента, обязательных для языков, подобных языку C, которые языкуPython не требуются.Круглые скобки не обязательныПервый элемент – это пара круглых скобок, окружающих условное выражениев основной инструкции:if (x < y)Круглые скобки здесь являются обязательными во многих C-подобных языках.В языке Python это не так – мы просто можем опустить скобки, и инструкциябудет работать точно так же:if x < yТочнее говоря, так как каждое выражение может быть заключено в скобки,присутствие их не будет противоречить синтаксису языка Python, и они небудут считаться ошибкой.
Но не делайте этого: вы лишь понапрасну будете328Глава 10. Введение в инструкции языка Pythonизнашивать свою клавиатуру, а окружающим сразу будет видно, что вы типичный программист на C, еще только изучающий Python (когда-то и я был такимже). Стиль языка Python����������������������������������������������������������������������������������������������������������������состоит в том, чтобы вообще опускать скобки в подобных инструкциях.Конец строки является концом инструкцииВторой, еще более важный синтаксический элемент, который вы не найдете в программном коде на языке ������������������������������������������Python,����������������������������������� – это точка с запятой. В языке ���Python не требуется завершать инструкции точкой с запятой, как это делаетсяв C-подобных языках:x = 1;Общее правило в языке ����������������������������������������������������Python����������������������������������������������гласит, что конец строки автоматически считается концом инструкции, стоящей в этой строке.
Другими словами, вы можетеотбросить точку с запятой, и инструкция будет работать точно так же:x = 1Существует несколько способов обойти это правило, как будет показано чутьниже. Но в общем случае большая часть программного кода на языке Pythonпишется по одной инструкции в строке, и тогда точка с запятой не требуется.В данном случае, если вы скучаете по тем временам, когда программировали на языке C (если такое состояние вообще возможно…), можете продолжатьвставлять точки с запятой в конце каждой инструкции – синтаксис языка допускает это.
Но не делайте этого: потому что если вы будете поступать так,окружающим сразу будет видно, что вы остаетесь программистом на языкеC, который никак не может переключиться на использование языка Python.Стиль языка Python состоит в том, чтобы вообще опускать точки с запятой.1Конец отступа – это конец блокаТеперь третий, и последний, синтаксический компонент, который удаляет Py���thon, и возможно, самый необычный для недавних экс-С-программеров (покаони не поработают с Python десять минут и не поймут, что в действительностиэто является достоинством языка), – вы не вводите ничего специально в вашкод, чтобы синтаксически пометить начало и конец вложенного блока кода.Вам не нужно вставлять begin/end, then/endif или фигурные скобки вокруг вложенных блоков2, как это делается в C-подобных языках:if (x > y) {x = 1;y = 2;}Для этих целей в языке Python используются отступы, когда все инструкциив одном и том же вложенном блоке оформляются с одинаковыми отступами1Кстати, в JavaScript также можно не ставить точку с запятой в конце строки, но широко распространена традиция ставить такой ограничитель, демонстрируя тем самым как раз хороший стиль оформления программного кода. – Примеч.