Python(Презентация к лекциям)


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Python.
История?
Язык программирования
Python
был создан примерно в 1991 году голландцем Гвидо ван
Россумом.
Свое имя
Пайтон (или Питон)
получил от названия телесериала, а не пресмыкающегося.
После того, как Россум разработал язык, он выложил его в Интернет, где уже целое соо
щество программистов присоединилось к его улучшению.
Python.
Что это?
Python
это интерпретируемый язык программирования: исходный код частями преобр
зуется в машинный в процессе выполнения специальной программой
интерпретатором.
Python
характеризуется ясным синтаксисом. Читать код на этом языке программирования
достаточ
но легко, т.к. в нем мало вспомогательных элементов, а правила языка заставляют
программистов делать отступы.
Python
это полноценный универсальный язык программирования. Он поддерживает об
ектно
ориентированн
парадигму
(на самом деле он и разрабатывался как объектно
ориентированный язык).
Python
является динамически типизированным языком программирования (всякий объект
связывается со своим типов в момент присвоения значения, а не в момент объявления).
Python
распрос
траняется свободно на основании лицензии подобной GNU General Public
License.
Девиз
Python.
Как писать программы на
Python
Вообще говоря, доступны два режима программирования:
В интерактивном режим
В виде скриптов
В основном интерпретатор выполняет команды построчно: пише
строку, нажимае
Enter,
интерпретатор выполняет ее, наблюдае
результат.
Это очень удобно, когда человек только изучает программирование или тестирует какую
нибудь небольшую часть кода.
Когда же
требуется сохранять исходный программный код для последующег
о использов
готовятся
файлы, которые передаются затем интерпретатору на исполнение. По отн
шению к интерпретируемым языкам программирования часто исходный код называют
скриптом. Файлы с кодом на Python обычно имеют расширение
Как Python
запускает программы
При
запуске программ
Python сна
чала компилирует исходный текст в формат, из
вестный
под названием
байт
код
. Компиляция
это просто этап перевода программы, а байт
код
это низкоуровневое, платформонезависимое пред
ставление исхо
дного текста программы.
Если интерпретатор Python обладает правом запи
си, он будет сохранять байт
код програ
мы в виде файла с расширением
.pyc
Затем, для выполнения сценария, сгенерированный байт
код передается на вход механизму,
называемому «виртуальной
машиной», которая запускает цикл, выполняя перебор инстру
ций в байт
коде, одну за другой и выполняет соответствующие им операции.
Скорость выполнения программ на
Python
В отличае от компилирующих языков программиро
вания, таких как C и C++, можно заметить, что в
Python
отсутствует этап сборки (программный код может запускаться сразу же, как только будет н
писан). Кроме того, байт
код не является двоичным ма
шинным кодом. Байт
код
это внутреннее
представление прогр
амм на языке Python.
Поэтому программный код на Python не может выполняться так же быстро, как программный код на
языке C или C++.
Обход инструкций выполняет виртуальная машина, а не ми
кропроцессор, и чтобы выполнить байт
код, необходимо больше времени,
чем того требуют машинные инструкции микропроцессора.
С другой стороны, в отличие от классических интерпретаторов, здесь присутствует дополнительный
этап ком
пиляции и интерпретатору не требуется всякий раз снова и снова анализиро
вать инструкции
исходного
текста. В результате Python способен обеспечить скорость выполнения где
то между тр
диционными компилирующими и тра
диционными интерпретирующими языками программирования.
Реализации
Python
Кроме стандартной, существуют и альтернативные реализации языка
Python:
CPython
обеспечивает взаимодействие с языком
Jython
обеспечивает взаимодействие с языком
Java
IronPython
обеспечивает взаимодействие с
.NET
Psyco
динамический компилятор языка
Python
, обеспечивает оптимизацию скорости выполнения
(выполнен в виде
JIT
компилятора (
Just
Time
Существую и другие менее популярные реализации
Python.
Например,
Shedskin
система, реал
зующяя нетрадиционный подход к вып
олнению программ на
Python
, преобразуя исходный код в и
ходный код на языке С++.
Фиксированные двоичные файлы
огда
возникает необходимость
создавать из Python
про
грамм самостоятельные исполня
мые файлы
, можно прибегнуть к созданию так
называемых фиксированных двоичных фа
лов.
Фиксированные двоичные файлы
объединяют в единый файл пакета
байт
код программ,
PVM и файлы поддержки, необходимые програм
мам. Существуют разные реализации так
го подхода, но в конечном результа
те получается еди
нственный исполняемый файл, кот
рый легко можно передать заказчику.
уществует три основных инструмента создания фикси
рованных двоичных файлов:
py2exe
(для Windows),
PyInstaller
Windows
Linux) и
freeze
(оригинальная версия).
Однако, ф
иксированные
двоичные файлы
это не то же самое, что получается в ре
зультате
работы настоящего компилятора, потому что они выполняют байт
код с помощью вирт
альной машины
и скорость
исполн
ения
программ такая же
, что и
обычны
файл
с и
ходными текстами программ, ра
зве что улучшен способ их запуска.
Как пользователь запускает программы
Существует несколько способов запуска программ пользователями:
Интерактивный режим
Системная командная строка и файлы
Исполняемые сценарии в UNIX (#!)
Щелчок на ярлыке файла
Трюк с использованием функции input
Импортирование и перезагрузка модулей
Важные сведения о модулях: атрибуты
Запуск модулей с помощью функции exec
Пользовательский интерфейс IDLE
10)
Другие интегрированные среды.
Интерактивный режим.
амый простой
способ запускать программы на языке Python
это вводить инструкции н
посредственно в командной строке интерпретатора, ко
торая иногда называется интеракти
ной оболочкой.
Если
интерпретатор установлен в системе как выполняемая программа, тогда
для
запус
интерактивн
сеанс
работы с интерпретатором
необходимо
ввести команду
python
без
аргументов в командной строке операционной системы.
() &#x/MCI; 11;&#x 000;&#x/MCI; 11;&#x 000;Type “help”, “copyright”, “credits” or “license” for more information. &#x/MCI; 12;&#x 000;&#x/MCI; 12;&#x 000;&#x/MCI; 12;&#x 000;&#x/MCI; 12;&#x 000;&#x/MCI; 12;&#x 000; &#x/MCI; 13;&#x 000;&#x/MCI; 13;&#x 000;Запустить интерактивный сеанс можно также, открыв главное окно
IDLE
или выбрав пункт
Python (command line)
в подме
ню
Python
в меню
Пуск
в ОС Windows.
Интерактивный режим.
При работе в интерактивном режиме результаты выполнения инструкций будут выводиться
сразу же после нажатия клавиши
Enter
вслед за строкой с приглашением
Пример:
Интерактивный режим.
В интерактивном сеансе результаты вы
ражений, которые вы вводите, выводятся автомат
чески и совершенно необяза
тельно явно использовать функцию
print
для вывода результ
тов.
Для выхода из интерактивного режима использу
ются
клавиши Ctrl
D (в UNIX) или Ctrl
Z (в
Windows).
Интерактивный режим может быть полезен при экспериментировании с констру
циями языка, при тестировании отдельных участков кода.
Некоторые
особенности интерактивного режима
Вводите только инструкции на языке Python.
интерактивном режиме допускается вводить только программ
ный код на языке Python,
никаких системных команд. В программном коде Python предусмотрены возможности в
полнять системные команды (например, с помощью
модуля
os.system
), но они не отличаю
ся простотой по срав
нению с непосредственным вводом команд.
Инструкция print необходима только в файлах.
интерактив
ном режиме интерпретатор автоматически выводит
результаты вычисле
ния
выражений
. Лишь при
соз
дани
программного кода в файлах: чтобы программный код в
файлах мог что
то выводить,
необходимо
использовать инструкции
print
,
так как
в этом
случае результаты выражений уже не выводятся автоматически.
Некоторые особенности интерактивного режима
Не используйте отступы в интерактивном режиме.
При вводе про
грамм на языке Python, как в интерактивном режиме, так и в текстовых фа
лах, все не вложенные инструкции
должны
начинать
с позиции 1.
противном случае,
Python может вывести сообщение
«SyntaxError»
(синтаксическая ошибка),
так как
пробелы
слева от инструкции рассматриваются интерпретато
ром как
отступ, обозначающий прина
лежность инструкции к вложенной группе
.
Будьте внимательны, когда с
трока приглашения к вводу изменяется на строку ввода
составной инструкции.
ри вводе второй и каждой последующей строки
составной инструкции
в интерактивном
режиме строка приглаше
ния к вводу может менять свой вид. В простом окне с командной
строкой пригла
шение к вводу >>> во второй и каждой последующей строке изменя
ется на
...
, в IDLE все строки, кроме первой, автоматически по
лучают отступы.
Некоторые особенности интерактивного режима
При работе в интерактивном режиме завершайте ввод составных
инструк
ций вводом
пустой строки.
Ввод пустой строки в интерактивном режиме (нажатие клавиши Enter в начале строки) с
общает интерпретатору, что вы завершили ввод многострочной инструкции. То есть,
чтобы
выполнить составную инструкцию, необходимо дважды на
жать клавишу Enter
. В фай
лах,
напротив, в конце составных инструкций пустая строка не требуется и если она имеется,
интерпретатор будет просто игнорировать ее.
В интерактивном режиме за один раз выполняется одна инструкция.
При работе в интерактивном
режиме сначала следует ввести и выполнить одну инструкцию
и только потом вводить другую. Для простых инструкций это требование соблюдается само
собой, так как нажатие клавиши Enter приво
дит к выполнению введенной инструкции. О
нако при работе с составными
инструкциями не забывайте, что они должны завершаться и
запускаться на выполнение вводом пустой строки.
Системная командная строка и файлы
Для
хран
ения
программ длительное время, необходимо сохранять про
граммный код в фа
лах, которые обычно
называются модулями.
Модули
это простые текстовые файлы, содержащие инструкции на языке Python. Как
только такой файл будет создан, вы можете предложить интерпретатору Python выполнить
инструкции в нем столько раз, сколько пожелаете.
Такой файл можно зап
устить на выполнение разными способами
из командной строки
системы, щелчком на ярлыке файла, из пользовательского интерфей
са IDLE и др
нтер
претатор Python будет выполнять весь программный код в модуле от начала до конца
всякий раз, когда вы будете е
го запускать.
Файлы модулей часто называются
программами
на языке Python.
Файлы модулей, которые запускаются на выполнение, иногда называют
сценариями
этим
неофициальным термином обозначаются файлы программ верхнего уровня.
Системная командная строка
и файлы
Первый сценарий.
Напишем первый сценарий
сохрани
введенные ин
струкции в файле с именем
script1.py
мена файлов с программным кодом, которые предполагается им
портировать из других
файлов, должны оканчиваться расширением
.py
Запу
стим
файл
Исполняемые сценарии в UNIX (#!)
Если Python использ
ется
в UNIX, Linux или в другой UNIX
подобной опера
ционной сист
ме, вы можете превратить файлы с программным кодом на язы
ке Python в исполняемые
программы, точно так же, как программы на языках командной оболочки, таких как ksh или
csh. Такие файлы обычно называются исполняемыми сценариями.
#!/usr/local/bin/python
rint(‚The Bright Side ‚ + ‚of Life...‘) # + означает конкатенацию строк
лчок на ярлыке файла
Использование реестра в операционной системе Windows позволяет открывать файл просто
щелчком мыши.
При установке интерпретатор Python автомати
чески регистрирует себя в качестве програ
мы, используемой для открытия файлов с программами на языке Python щелчком мыши.
Это делает возмож
ным запуск программ на языке Python простым щелчком (или двойным
щелч
ком) мыши на ярлыке файла.
Трюк с использованием функции input
Запуск
сценария вызывает появление окна на очень короткое время и завершает работу, з
крывая окно и исчезая. Этот недостаток легко ликвидируется.
Если вам требуется, чтобы результаты работы сценария оставались на экране после щелчка
мышью на яр
лыке файла, просто
добавьте вызов встроенной функции
input
в самом конце
сценария.
Функция
input
считывает следующую строку с устройства стандарт
ного ввода, ожидая ее,
если она еще недоступна. В результате в данном случае сценарий приостанавливается, бл
годаря чему окно
остается на экране, пока не будет нажата клавиша Enter.
Импортирование и перезагрузка модулей
Каждый файл с исходным текстом на языке Python, имя кото
рого оканчивается расширен
ем
.py
, является модулем.
Другие файлы могут обращаться к
программным компонентам, объявляемым модулем, и
портируя этот модуль.
нструкция
import
выполняет загрузку другого файла и обеспечивает доступ к его соде
жимому. Содержимое модуля становится до
ступным внешнему миру через его атрибуты.
Такая модульная мод
ель является центральной идеей, лежащей в основе ар
хитектуры пр
грамм на языке Python.
Крупные программы обычно организо
ваны в виде множества файлов модулей, которые и
портируют и используют функциональные возможности из других модулей.
Один из
таких
мод
улей определя
ется как
основной файл верхнего уровня
, который запуск
ет всю программу.
Импортирование и перезагрузка модулей
Операция импорта на заключительном этапе приводит к выполнению про
граммного кода
загружаемого файла и, как следствие,
импорт файла является еще одним способом з
пустить его
.
Пример
Однако т
акой способ пригоден только для однократного запуска
модуля в течение се
анса.
Импортирование и перезагрузка модулей
После первой операции импорта все последующие попытки импортиро
вать модуль не пр
водят ни к каким результатам, даже если изменить и сохра
нить исходный текст модуля в
другом окне:
��� import script1
��� import script1
Так сделано преднамеренно
операция импорта требует слишком больших за
трат вычисл
тельных ресурсов, чтобы выполнять ее более одного раза в ходе выполнения программы.
Импортирование и перезагрузка модулей
Если возникает необходимость вынудить интерпретатор мно
гократно запускать файл в
рамках одного и того же сеанса (без остановки и перезапуска сеанса), можно воспольз
ваться встроенной функцией
reload
, доступной в модуле
imp
из стандартной библиотеки.
Инструкция
from
в этом примере копирует имя функции из модуля.
Функция
reload
загружает и запускает теку
щую версию программного кода в файле.
Запуск модулей с помощью функции exec
Существует еще несколько способов выполнить программный код,
хранящийся в файлах
модулей.
Например, вызов встроенной функ
exec(open(‘module.py’).read())
это еще
один способ выполнять файлы из интерактивной оболочки, фактически не импортируя м
дуль. Каждый по
следующий вызов
exec
будет выполнять текущую версию
файла и ликв
рует необходимость позднее выполнять перезагрузку модуля:
Пользовательский интерфейс IDLE
Чтобы запустить файл с программным кодом в среде
IDLE
, выберите окно, где редактир
ется текст, раскройте меню
Run
(Запустить)
и выберите в нем пункт
Run Module (Запу
тить модуль)
(или воспользуйтесь соответствующей этому пун
кту меню горячей комбин
цией клавиш). Если с момента открытия или по
следнего сохранения файла его содержимое
изменялось, Python предложит сохран
ить его.
Когда сценарий запускается таким способом, весь вывод, который он генери
рует, а также
все сообщения об ошибках появляются в основном окне интерак
тивного сеанса работы с
интерпретатором.
Другие интегрированные среды
Писать программы
на Python и выполнять их можно также и в других средах разработки:
Eclipse и PyDev
Komodo
NetBeans IDE для Python
PythonWin и др.
Также такие программы можно встраивать в коды других языков программирования.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
встроенные
типы объе
тов,
досту
ные в языке
thon
, и
взаимоотн
шения между
ними
в языке Python
все элементы
являются об
ектами
пример, мо
но передать
класс в фун
цию, присв
ить его пер
менной, з
полнить им
список или
словарь и так
далее.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
анные в языке
Python
представлены в форме
объектов
Объекты бывают:
либо встроенными, предоставляемыми языком
Python
либо такими, которые создаются программно с применением конструкций языка
Python или других
инструментов, таких как библиотеки расширений, написанные
на язы
ке C.
о сути, объек
ты
это области памяти со значениями и ассоциированными с ними набор
ми операций.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
рограммы на языке
Python
можно разложить на такие составляющие, как
одули
нструкции
ыраже
бъекты
ри этом:
Программы делятся на модули.
Модули содержат инструкции.
Инструкции состоят из выражений.
Выражения создают и обрабатывают объекты.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД
НИМИ
В таких языках программирования как С++
при написании серьёзных программных
продуктов
значительная доля рабо
ты приходится на реализацию
объектов
, известных та
же как
структуры данных
, которые предназначены для представления составляющих
предмет
й области.
В таких языках программирования необходимо заниматься
про
работкой структур данных,
управлять выделением памяти,
реализовывать функции поиска и доступа к элементам структур
и так далее.
Это достаточно утомительно (и способствует появлению
ошибок) и, как правило, о
влекает от достижения истинных целей
, хотя подобное умение и ценится высоко
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
В типичных программах на языке
Python
в этом нет необходимости.
Python
предоставляет мощную коллекцию объектных типов, встроенных непосред
ственно
в язык, поэтому обычно нет никакой необходимости создавать соб
ственные реализации
объектов, предназначенных для решения поставленных задач.
сли нет
необходимости
в специальных
типах данных и их особой
обработки, которые не
обеспечиваются
стандартными средствами
,
то
луч
ше
пользоваться
встроенны
объект
ами
вместо реализации своих собственных.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
Базовые типы данных в языке Python

Тип объекта
Пример литерала/создания
Числа
Целые, вещественные, комплексные:
1㈳4
㌮ㄴ1㔀
3⬴j
1㈳4

㌮ㄴㄵ

㌫㑪

䐀e捩洀慬

䘀爀慣琀io渀
Строки
‘spam’, “guido’s” , b’a
x01c’
Списки
[1, [2, ‘three’], 4]
Словари
{‘food’: ‘spam’, ‘taste’: ‘yum’}
Кортежи
(1,’spam’, 4, ‘U’)
Файлы
myfile = open(‘eggs’, ‘r’)
Множества
set(‘abc’), {‘a’, ‘b’, ‘c’}
Прочие базовые типы
Сами типы, None, логические значения
Типы структурных эл
ментов программ
Функции, модули,
классы
, конструкции исключений
Типы, имеющие отнош
ние к реализации
Компилированный программный код, стек вызовов
, ба
ты и массивы байтов
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
Базовые типы данных в языке Python
Таблица содержит далеко не полный
список, потому что объектами явля
ются все данные,
которые приходится обрабатывать в программах на языке
Python
Например, когда на языке
Python
реализуется поиск текста по шабло
ну,
создаются объе
ты шаблонов, когда программируются сетевые взаимо
дейст
вия,
используются объекты
сокетов.
Иногда есть необходимость в проверке выполнимости действия успешно или неудачно. И
для таких
целей
используется
объект типа
NoneType
, именуемый
None
(эквивалент
null
большинстве других языков программирования)
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
Базовые типы данных в языке Python
Существуют и другие типы объек
тов, которые создаются в результате импорта и использ
вания модулей, и все они обладают своим собственным поведением.
Например, структурные элементы программ, такие как
функции
,
модули
классы
, также
являются объектами в язы
ке Python
они создаются с помощью инструкций и выражений,
таких как
def
,
class
,
import
lambda
, и могут свободно передаваться между различными
стями сценариев, сохраняться в других объектах и так далее.
Кроме того, в языке Python имеется множество типов, имеющих отношение к реализации,
таких как
объекты с компилированным программным кодом
,
они представ
ляют инт
рес скорее для разработчиков инс
трументов, чем для прикладных программистов.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
Базовые типы данных в языке Python
Типы объектов, перечисленные в таблице, обычно называют
базовыми
, по
тому что они
встроены непосредственно в язык
Python
, то есть для
создания большинства из них испол
зуется вполне определенный синтаксис.
Например, когда выполняется следующий программный код:
то, говоря техническим языком, выполняется выражение
литерал, которое ге
нерирует и
возвращает новый строковый объек
т. Такова специфика синтакси
Python
создания этого
объекта.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
Базовые типы данных в языке Python
Похожим образом выражение, заключенное в квадратные скобки, создает
список
, закл
ченное в фигурные скобки
сло
варь
и так далее.
Хотя, как
ы убеди
ся,
в языке
Python
отсутствует конструкция объявления типа
, сам си
таксис выполняемых выражений зада
ет типы создаваемых и используемых объектов. Фа
тически выражения, соз
дающие объекты, подобные тем, что представлены в т
аблице, в
языке
Python
являются источниками типов.
ак только будет создан объект, он будет ассо
циирован со своим собственным набором
операций на протяжении всего вре
мени существования
над строками можно будет выпо
нять только строковые операции, над
списками
только операции, применимые к спискам.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
Базовые типы данных в языке Python
В языке Python используется динамическая типизация
(типы данных определяются а
томатически и их не требуется объявлять в
программ
ном коде)
ри этом
Python
является языком со строгой типизацией (вы сможете выполнять над об
ектом только те операции, которые применимы к его типу).
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА
Базовый
числовой
бор
объектов языка
Python
включает в себя вполне ожидаемые типы:
целые числа (числа без дробной части),
вещественные числа (грубо говоря, числа с де
сятичной точкой)
и более экзотические
числовые
типы
комплексные числа с мнимой частью,
числа с фиксированной точностью,
рациональные числа,
числа,
представлен
ные парой целых чисел,
числитель и знаменатель дроби,
логические значения
целые числа неограниченной точности
и множества.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА
Числа в
Python
поддер
живают набор самых обычных
математических операций.
Например, символ «плюс» (+) означает сложение, символ «звездочка» (*)
умножение, а
два сим
вола «звездочка» (**)
возведение в степень.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА. Числовые литералы
Литерал
Интерпретация
1234,
24, 0, 9999999999999999999
9999999999999999999
Обычные целые числа (с неограничен
ной
точностью представления)
1.23, 1., 3.14e
10, 4E210, 4.0e+210
Вещественные числа
0177,
x9ff,
b101010
,
ичные
литералы целых чисел в
версии 2.6
o177,
x9ff,
b101010
,
ичные
литералы целых чисел в
версии 3.0
3+4j, 3.0+4.0j, 3J
Литералы комплексных чисел
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА
Python 3.0
целые чис
ла автоматически обеспечивают неограниченную точность для
представления больших значений

Python 2.6
для представления больших целых чисел
име
ется отдельный тип длинных целых чисел)
Например, мож
попробовать вычислить 2 в степени 1 000
000
. В результате
на экран б
дет выведено число длиной более 300 000 знаков, что может занять продол
жительное вр
).
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА
Рассмотрим пример с вещественными числами:
Первый результат
это не ошибка
роблема связана с отображением.
содержимо
любого объекта
происходит либо
с полной точностью (как в первом результате),
либо
форме, более удобной для вос
приятия человеком (как во втором результате).
ервая форма назы
вается
repr
(объект в виде программного кода), а вторая
str
объект в
отформатированном строковом представлении
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА
ля выполнения операций с числами в составе
Python
есть несколько полезных модулей:
Модуль
math
содержит более сложные математические функции
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА
одуль
random
реализует генератор случайных чисел и функцию случайного выбора
) &#x/MCI; 12;&#x 000;&#x/MCI; 12;&#x 000;1 &#x/MCI; 13;&#x 000;&#x/MCI; 13;&#x 000; &#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;Имеется ряд и других модулей научных вычислений
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА. Операторы выражений
Операторы выражений
Операторы
Описание
Поддержка протокола send в функциях
генераторах
Создает анонимную функцию
Трехместный оператор выбора (значение x вычисля
ется, только
если значение y истинно)
Логическая операция ИЛИ (значение y вычисляет
ся, только если
значение x ложно)
Логический оператор И (значение y вычисляется, только если зн
чение x истинно)
Логическое отрицание
Проверка на вхождение (для итерируемых объектов и множеств)
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА. Операторы выражений
Операторы
Описание
Проверка идентичности объектов
�x y,
�x = y
x == y,
x !
Операторы сравнения, проверка на подмножество и надмножество
Операторы проверки на равенство
Битовая операция ИЛИ, объединение множеств
Битовая операция «исключающее ИЛИ» (XOR), симметрическая
разность множеств

ТИПЫ ДАННЫХ И
ОПЕРАЦИИ НАД НИМИ
ЧИСЛА. Операторы выражений
Операторы
Описание
Битовая операция И, пересечение множеств
Сдвиг значения x влево или вправо на y битов


y

Сложение, конкатенация
Вычитание, разность множеств
x / y, x // y
Умножение, повторение
Остаток, формат
Деление: истинное и с округлением вниз
Унарный знак «минус», тождественность
Битовая операция НЕ (инверсия)
Возведение в степень

ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД
НИМИ
ЧИСЛА. Операторы выражений
Операторы
Описание
Индексация (в последовательностях, отображениях и других
объектах)
Извлечение среза
Вызов (функций, классов и других вызываемых объектов)
Обращение к атрибуту
Кортеж, подвыражение, выражение
генератор
Список, генератор списков
Словарь, множество, генератор словарей и мно
жеств
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Смешанные операторы и определение старшинства
Кроме
элементарных в
языке
Python
можно создавать сложные выражения, объединяя н
сколько операторов в одной инструкции. Например,
В таком случае важную роль играет
старшинств
опера
торов. Когда интерпретатор
Python
встречает
сложное
выражение
,
делит его на отдельные части в соответствии с правила
ми
старшинства и определяет порядок вычисления этих частей выражения. В табл
ице операт
ров, приведенной выше,
операторы расположены в порядке возрастания старшинства
Чем выше приоритет оператора, тем
раньше он выполняется в смешанных выражениях.
Если в выражении имеется несколько операторов
с одинаковым приоритетом
, они в
полняются в направлении слева направо (исключе
ние составляет оператор возведения в
степень
эти операторы выполня
ются справа на
лево, и операторы отношений, которые
объединяются в на
правлении слева направо).
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Группировка подвыражений с помощью
старшинстве операторов
мож
забыть
, если группиро
вать части выражений с помощью
круглых скобок. Когда часть выражения за
ключается в круглые скобки, они отменяют пр
вила старшинства операторов
снаружи них
Python всегда в первую очередь вычисляет
подвыражения в круглых скобках, а затем
подставляет
результат
вычисления в оставшееся
ражение
.
Например, выражение X + Y * Z можно записать одним из следующих спосо
бов, чтобы в
нудить Python произвести вычисления в требуемом порядке:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Смешивание типов и их преобразование
Помимо смешивания операторов мож
также смешивать различные чис
ловые типы.
пример
:
Однако возникает
вопрос: какого типа будет результат
целое чис
ло или вещественное
число?
выражениях, где участвуют значения различных типов, интерпретатор сначала
выполняет пре
образование типов операндов к типу самого сложного операнда, а потом при
меняет математику, специфичную для этого типа.
Интерпретатор
Python
ранжирует сложность число
вых типов следующим об
разом: целые
числа проще, чем вещественные числа, которые проще комплекс
ных чисел.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Смешивание типов и их преобразование
Существует возможность принудительного преобразования типов с помощью встроенных
функций:
Однако в обычных ситуациях делать это не приходится,
так как
Python
томатически в
полняет преобразование типов и тип результата соответствует
правилам типизации
.
При этом
преобразования производятся только при смешивании числовых типов
Python
не
выполняет автоматическое преоб
разование других типов.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Обзор: перегрузка операторов и полиморфизм
языке
Python
существует возможность выпол
нить перегрузку любого оператора с пом
щью классов
Python
или расширений на языке
для работы с создаваемыми объектами.
Кроме того,
Python
сам автоматически перегружает некоторые операторы, что
бы с их п
мощью можно было выполнять различные действия, в зависимости от типа встроенных
объектов.
Например, операто
р + выполняет операцию сло
жения, когда применяется к числам, но к
гда он применяется к последователь
ностям, таким как строки или списки, он выполняет
операцию конкатенации. В действительности оператор + может выполнять любые действия,
когда при
меняется
к объектам, которые определя
с помощью классов.
та особенность обычно называется полиморфизмом
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Переменные и простые выражения
Переменные
это имена, создаваемые в языке
Python
, которые
предназначены
для
обозн
чения
, временного хранения и манипуляции
информаци
в программах.
языке
Python
:
Переменные создаются с помощью операции присваивания
(=)
.
При вычислении выражений имена переменных замещаются их значения
ми.
Прежде чем переменная сможет учас
твовать в выражениях, ей должно быть присвоено
значение.
Переменные являются ссылками на объекты и никогда не объявляются за
ранее.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Переменные и простые выражения
ассмотрим основные арифметические
операции.
Для присво
ения
двум переменным (a и b) целочисленны
значени
й выполним следующее
:
пераци
присваивания автоматически приво
т к созданию переменных a и b
и помещ
нию в них заданных значений и,
вспоминая встретившийся ранее термин динамическая т
пизация, это означает, что переменная приобретает тип связанного с ней литерала.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Переменные и простые выражения
Когда переменные
участвуют в выражении, они
замещаются их значениями, а при работе в
интерактивном режиме резуль
тат вычисления выражения тут же выводится на экран:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Переменные и простые выражения
Записи результатов в скобках представляют собой
кортежи, состоящие из двух значений,
так как
вводимые строки содержат по два выра
жения, разделенные запятыми. Именно по
этой причине результаты отобража
ются в круглых скобках (подробнее о кортежах будет
рас
сказываться позднее).
Следует заметить, что
выше описанные
выражения выполняются без ошибок потому, что
нее переменным a и b были присвоены значения. Если использовать переменную, кот
рой еще не было присвоено значение,
Python
выведет сообщение об ошибке
. Таким обр
зом, в
языке
Python
не требуется заранее объявлять переменные, но прежде чем их можно
будет использовать, им должны быт
ь присвоены некоторые зна
чения (они должны быть
проинициализированы)
:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Переменные и простые выражения
Ниже приводятся два более сложных выражения, чтобы проиллюстрировать порядок в
полнения операторов и производимые преобразования:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Форматы отображения чисел
последнем примере была использована инструкция
print
. Без этой инструкции результат
мог бы показаться немного странным:
Причина в ограниче
ниях аппаратных средств, реализующих вещественную
арифметику
, и в
невоз
можности обеспечить точное представление некоторых значений.
ри автоматич
ском выводе результатов в ходе интерактивного сеанса ото
бражается больше цифр, чем при
использовании инструкции
print
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Форматы отображения чисел
роме применения функции print и автоматического вывода результатов существуют и др
гие способы отображения чисел:

ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Форматы представления repr и str
технической точки зрения различие между функцией автоматическо
го вывода в интера
тивной оболочке и инструкцией print соответствует различ
между встроенными фун
циями repr и str:
repr

выводит результаты в том виде, в каком они были бы указаны в программном
коде;
str
выполняет преобра
зование значения в более дружественное представление.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Операции сравнения: простые и составные
Кроме
стандартны
числовы
операци
(таки
как сложение или умножение),
над
числа
можно
выполнять
сравн
ение
. Обыч
ные операторы сравнения действуют именно так, как и
можно было бы ожи
дать,
они сравнивают значения операндов и возвращают логический
резуль
тат:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Операции сравнения: простые и составные
Python
позволяет составлять цепочки из нескольких операторов сравнения, для выполнения
проверки на принадлежность диапазо
ну значений. Цепочка операторов сравнения является
сокращен
ной формой записи более длинных логических выражений.
Таким образом,
объ
дин
несколько операций сравнения, чтобы реализовать проверку на вхождение в ди
пазон значений. Например, допустим, что в программе имеются следующие инструкции
присваивания:
Эти
два выражения идентичны, но первое короче и выполняется быстрее, потому что и
терпретатору приходится вычислять значение Y только один раз
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Операции сравнения: простые и составные
То же самое относится и к выражениям с ложным результатом
. К
роме того, до
пускается с
ставлять цепочки произвольной длины:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Деление: классическое, с округлением вниз и

истинное
Фак
тически существует три версии операции деления и два различных оператора деления:
X / Y
Классическое и истинное деление.
В Python 2.6 дробная часть результата усекается при
делении целых чисел и сохраняется при делении вещественных чисел. В Python
3.0 всегда
сохраняет
дробн
часть неза
висимо от типов операндов.
X // Y
Деление с округлением вниз.
сегда отсекает
дробн
часть, округляя результат до
ближайшего наименьшего целого независимо от типов операндов.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Деление: классическое, с округлением вниз и

истинное
Примеры
��� 10 /
2
��� 10 / 4.0
2.5
��� 10 // 4.0
2.0

ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Поддержка обеих версий Python
оведение оператора / различно в версиях 2.6 и 3.0,
суще
ствует возможность обеспечить
поддержку обеих версий в своем программном коде.
При
выполн
ении
операци
целочи
ленного деле
ния с усечением, используйте оператор // в обеих версиях, 2.6 и 3.0.
Но, е
сли
в обеих версиях
про
грамм
нужно
получить вещественный результат при делении
целых чисел без усечения дробной части
используйте в операторе / функцию
float
Кроме того, в версии 2.6 режим истинного деления, который используется в версии 3.0,
можно включить импортир
одуль
__future__
:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Округление вниз и усечение дробной части
Для округления
вещественного результата до нижней границы в
модул
math
имеется
функция
floor()
, а для отсечения дробной части
trunc()
:
ТИПЫ ДАННЫХ
И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Целые числа (int)
Числа в
Python 3
ничем не отличаются от обычных чисел. Они поддерживают набор самых
обычных математических операций:
x + y
Сложение
砠┠礀
Остаток от деления
Вычитание
Смена знака числа
砠⨠礀
Умножение
愀扳⡸⤀
Модуль числа
砠⼀⁹
Деление
摩癭潤⡸,⁹⤀
Пара (x // y, x % y)
x ⼀⼀⁹
Получение целой части от деления
砠⨪⁹
Возведение в степень
灯眀⡸,⁹嬬 稀崀⤀
по модулю
(если модуль задан)
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Целые числа
(int)
Также нужно отметить, что целые числа в
ython 3
, в отличие от многих других языков,
поддерживают длинную арифметику (
то требует больше памяти).
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Битовые операции
Над
целыми числами также можно производить битовые операции
x | y
Побитовое
или
x 帠礀
Побитовое
исключающее или
x ☀ 礀
Побитовое
x 㰼 渀
Битовый сдвиг влево
x 㸾 礀
Битовый сдвиг вправо
Инверсия битов
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Дополнительные методы
int.bit_length()
количество бит, необходимых для представления числа в двоичном виде,
без учёта знака и лидирующих нулей.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Дополнительные методы
int.to_bytes(length, byteorder, *, signed=False)
возвращает
строку байтов
, представля
щих
заданное
число.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Дополнительные методы

ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА. Системы счисления
Известно
, что числа могут быть представлены не только в десятичной системе счисления. К
примеру, в компьютере используется двоичный код, и, к примеру, число 19 в
двоичной си
теме счисления будет выглядеть как 10011. Также иногда нужно переводить числа из одной
системы счисления в другую.
Однако,
это всего лишь альтернативный синтаксис задания
значе
ний целочисленных объектов. Например:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА. Системы счисления
Python
для этого предоставляет несколько функций:
int([object], [основание системы счисления])
преобразование к целому числу в десяти
систем
счисления. По умолчанию система счисления десятичная, но можно задать
любое основание от 2 до 36 включительно.
bin
(x)
преобразование целого числа в двоичную строку.
hex(х)
преобразование целого числа в шестнадцатеричную строку.
oct(х)
преобразование целого числа в восьмеричную строку.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА. Системы счисления
val(
[object])
интерпретирует стро
ку во входном аргументе как программный код на языке
Python. Поэтому она может воспроизводить похожий эффект:
елые числа
также
могут быть пре
образованы в
двоичное,
восьмеричное и шестнад
цатеричное представления с помощью строкового метода форматирования и оператора
форматирования строк:
Неограниченность точности целых чисел справедлива и для разных систем счисления.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА. Системы счисления
Примеры:
>>> a = int('19') # Переводим стр
��� c = int(19.5) #
Результат пр
>>> 0b10011 # Так тоже можно зап
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Вещественные числа (float)
Вещественные числа поддерживают те же операции, что и целые. Однако (из
за предста
ления чисел в компьютере) вещественные
числа неточны, и это может привести к ошибкам:
Для высокой точности используют другие объекты (например
Decimal
Fraction
)).
Также вещественные числа не поддерживают длинную арифметику:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ
НАД НИМИ
ЧИСЛА.
Вещественные числа (float)
римеры работы с числами:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Дополнительные
методы
float.as_integer_ratio()
пара целых чисел, чьё отношение равно этому числу.
float.is_integer()
является ли значение целым числом.
float.hex()
переводит float в hex (шестнадцатеричную систему счисления).
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Комплексные числа (complex)
Python
встроены также и комплексные числа
. Рассмотрим
их на примерах
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Комплексные числа (complex)
ля работы с комплексными числами используется
модуль
cmath
cmath.phase(x)
возвращает фазу комплексного числа (её ещё называют аргументом). Э
вивалентно
math.atan2(x.imag, x.real)
.
Результат лежит в промежутке [
π, π].
Получить модуль комплексного числа можно с помощью встроенной функции
abs()
cmath.polar(x)
преобразование к полярным координатам. Возвращает пару (r, phi).
cmath.rect(r, phi)
преобразование из полярных координат.
cmath.exp(x)
ex.
cmath.log(x[, base])
логарифм x по основанию base. Если base не указан, возвращается н
туральный логарифм.
cmath.log10(x)
десятичный логарифм.
cmath.sqrt(x)
квадратный корень из x.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Комплексные числа (complex)
cmath.acos(x)
арккосинус x.
cmath.asin(x)
арксинус x.
cmath.atan(x)
арктангенс x.
cmath.cos(x)
косинус x.
cmath.sin(x)
синус x.
cmath.tan(x)
тангенс x.
cmath.acosh(x)
гиперболический арккосинус x.
cmath.asinh(x)
гиперболический арксинус x.
cmath.atanh(x)
гиперболический арктангенс x.
cmath.cosh(x)
гиперболический косинус x.
cmath.sinh(x)
гиперболический синус x.
cmat
h.tanh(x)
гиперболический тангенс x.
cmath.isfinite(x)
True, если действительная и мнимая части конечны.
cmath.isinf(x)
True, если либо действительная, либо мнимая часть бесконечна.
cmath.isnan(x)
True, если либо действительная, либо мнимая часть N
aN.
cmath.pi
cmath.e
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Другие встроенные средства для работы с числами
В дополнение к базовым типам объектов
Python
предоставляет встроен
ные функции и м
дули для работы с числами. Встроенные функции
pow
abs
, например, вычисляют степень
и абсолютное значение числа соответственно:
��� import math
��� math.pi, math.e
(3.1415926535897931, 2.7182818284590451)
��� math.sin(2 * math.pi / 180)
0.034899496702500969
sqrt(144), math.sqrt(2)
(12.0, 1.4142135623730951)
��� pow(2, 4), 2 ** 4
42.0), sum((1, 2, 3, 4))
��� min(3, 1, 2, 4), max(3, 1, 2, 4)



ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Другие встроенные средства для работы с числами
Существует множество способов окру
гления десятичных знаков в вещественных числах:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Другие встроенные средства для работы с числами
ве последние инструкции имеют существенные отли
чия
функция
round
округляет вещ
ственное число и возвращает веществен
ное число, тогда как операции форматирования
строк возвращают строку, а не измененное число:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Другие встроенные средства для работы с числами
языке
Python
существует три способа вычисления квадрат
ных корней: с помощью фун
ции из модуля
math
, с помощью выражения и с помощью встроенной функции:
>>> math.sqrt(144) # Функция из модуля math
>>> pow(144, .5) # Встроенная функция
>>> math.sqrt(1234567890) # Большие числа
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Другие встроенные средства для работы с числами
одули из стандартн
библиотек, так
math
, необходимо
импортировать, а встрое
ные функции, такие как
abs
round
, до
ступны всегда, без выполнения операции импорта.
Говоря другими словами, модули
это внешние компоненты, а встроенные функции пост
янно распола
гаются в пространстве имен, которое используетс
я интерпретатором
Python
по
умолчанию для поиска имен, используемых программой.
Python
3.0 это пространство имен соответствует модулю с именем
builtin
__builtin__
вер
сии 2.6).
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Другие встроенные средства
для работы с числами
Модуль
random
из стандартной библиотеки также необходимо импортировать. Этот м
дуль предоставляет возможность получения случайных вещественных чисел в диапазоне от
0 до 1, случайных целых чисел в заданном диапазоне, случайного выб
ора элементов посл
довательности и многое другое:
��� import random
��� random.random()
0.44694718823781876
��� random.random()
0.28970426439292829
��� random.randint(1, 10)
��� random.randint(1, 10)
random.choice([‘Life of Brian’, ‘Holy Grail’, ‘Meaning of Life’])
‘Life of Brian’
‘’‘’‘’) &#x/MCI; 25;&#x 000;&#x/MCI; 25;&#x 000;‘Holy Grail’ &#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000;Модуль
random
может использоваться для перемешивания колоды карт в игре, случайного
выбора изображения в программе демонстрации слай
дов, в программах статистического
моделирования и так далее.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Числа с фиксированной точностью
исла с фиксиро
ванной точностью представления
Deci
mal
создаются вызовом
одноиме
ной
функции из импортируе
мого модуля и не имеют литерального представления.
Функционально числа с фиксированной точностью
являются
вещественны
числа
, но с
фиксиро
ванным числом знаков после запятой.
Например, с помощью таких чисел можно хранить значение, которое всегда будет иметь
два знака после запятой.
Кроме того, можно указать, как долж
ны обрабатываться лишние десятичные цифры
каться или округлять
ся.
И хотя скорость работы с такими числами несколько ниже, чем с обычными вещественн
ми числами, тем не менее, тип чисел с фиксированной точностью идеально подходит для
представления величин, имеющих фиксированную точность, таких как денежные суммы, и
для
достижения лучшей точности представления.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Числа с фиксированной точностью
ещественная арифметика страдает некоторой долей неточности из
за ограничения объема
памяти, выделяемого для хранения веще
ственных
чисел. Например, результат следующего
выражения должен быть равен нулю, но точность вычислений страдает из
за недостаточн
го числа би
тов в представлении вещественных чисел:
��� 0.1 + 0.1 + 0.1
5.5511151231257827e
Попытка вывести результат в б
олее дружественной форме мало помогает, пото
му что пр
блема связана с ограниченной точностью представления веществен
ных чисел:
��� print(0.1 + 0.1 + 0.1
Однако при использовании чисел с фиксированной точностью результат полу
чается то
ным:
��� from decimal import Decimal
��� Decimal(‘0.1’) + Decimal(‘0.1’) + Decimal(‘0.1’)
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Числа с фиксированной точностью
исла с фиксированной точностью
представле
ния создаются вызовом функции конструкт
ра
Decimal
из модуля
decimal
, ко
торому передается строка, содержащая желаемое число
знаков после запятой (при необходимости можно воспользоваться функцией
str
, чтобы пр
образо
вать вещественное число в ст
року).
Когда в выражении участвуют числа с раз
личной точностью представления,
Python
авт
матически выбирает наиболь
шую точность для представления результата:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Глобальная настройка точности
В модуле
decimal
имеются дополнительные инструменты, позволяющие за
давать точность
представления всех таких чисел и многое другое. Например, объект контекста в этом мод
ле
позволяет задавать точность (число знаков по
сле запятой) и режим округления (вниз,
вверх и так далее). Точность задается глобально, для всех чисел с фиксированной точн
стью, создаваемых в теку
щем потоке управления:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Менеджер контекста объектов класса Decimal
В версиях
Python
2.6 и 3.0 (и выше) имеется также возможность временно пе
реопределять
точность с помощью инструкции
with
менеджера контекста. По
сле выхода за пределы и
струкции настройки точности восстанавливаются:
��� import decimal
decimal.Decimal(‘1.00’) / decimal.Decimal(‘3.00’)
Decimal(‘0.3333333333333333333333333333’)
��� with decimal.localcontext() as ctx:
... ctx.prec = 2
... decimal.Decimal(‘1.00’) / decimal.Decimal(‘3.00’)
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Рациональные числа
исловой тип
Fraction
реализует объекты рациональных чисел. Объекты этого типа в я
ном виде хранят числи
тель
и знаменатель рациональной дроби, что позволяет избежать н
точности и некоторых других ограничений, присущих вещественным числам.
Тип
Fraction
является своего рода родственником типа
Decimal
и точно так же может и
пользоваться для управления точностью пр
едставления чисел за счет определения колич
ства десятичных разрядов и политики округления.
Оба типа используются похожими спосо
бами
как и класс
Decimal
, класс
Fraction
нах
дится в модуле. Чтобы создать объект этого типа, необходимо импортировать модуль
и в
звать конструктор класса, передав ему числитель и знаменатель.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Рациональные числа
Пример:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Рациональные числа
После создания объекты типа
Fraction
могут использоваться в математических выражениях
как обычные числа:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Рациональные
числа
Рациональные числа могут создаваться из строк с представлением веществен
ных чисел, как
и числа с фиксированной точностью:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Преобразование и смешивание в выражениях
значений разных типов
Для поддержки преобразования в рациональные числа в объектах веществен
ных чисел был
реализован метод
as_integer_ratio
,
возвращающий соответству
ющие числу числитель и
знаменатель;
объекты рациональных чисел обладают методом
from_float
а функция
float
теперь может принимать объекты типа
Fraction
в качестве аргумента.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Преобразов
ание и смешивание в выражениях
значений разных типов
ример (символ * во втором примере
это специальный синтаксис распаковывания
кортежа в отдельные аргументы
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Преобразование и смешивание в выражениях
значений разных типов


0.33333333333333331

��� float(z)

��� float(x + z)
2.8333333333333335

��� 17 / 6
2.8333333333333335

� fraction:
��� Fraction(*(1.75).as_integer_ratio())
Fraction(7, 4)


ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Преобразование и смешивание в выражениях
значений разных типов
выражениях допускается смешивать некоторые типы, при этом иногда, чтобы сохранить
точность, необходимо вручную выполнить преобра
зование в тип
Fraction
:
x + 2 # Fraction + int
��� x + 2.0 # Fraction + float
2.3333333333333335
��� x + (1./3) # Fraction + float
0.66666666666666663
��� x + Fraction(4, 3) # Fraction + Fract
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Преобразование и смешивание в выражениях
значений разных типов
есмотря на то, что имеется возможность преобразовать ве
щественное число в рационал
ное, в некоторых случаях
это может приводить к потере точности, потому что в своем пе
воначальном виде вещественное чис
ло может быть неточным. В случае необходимости в
подобных случаях можно ограничить максимальное значение знаменателя:
1.3333333333333333
/ 3).as_integer_ratio() # Произойдет потеря точности
(6004799503160661, 4503599627370496)
��� a = x + Fraction(*(4.0 / 3).as_integer_ratio())
Fraction(22517998136852479, 13510798882111488)
��� 22517998136852479 / 13510798
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Логические значения
Иногда утверждается, что логический тип
bool
в языке
Python
по своей при
роде является
числовым, потому что два его значения
True
False
это всего лишь целые числа
,
вывод которых настроен особым образом.
Официально в языке
Python
имеется самостоятельный логический тип с име
нем
bool
, с
двумя предопределенными значениями
True
False
. Эти значения являются экземплярами
класса
bool
, который в свою очередь является всего лишь подклассом (в объектно
ориентированном смысле) встроенного целочис
ленного типа
int
.
True
False
ведут себя
точно т
ак же, как и целые числа
, за исключением того, что для их вывода на экран и
пользуется другая логика
они выводятся как слова
True
False
вместо цифр
. Техн
чески это достига
ется за счет переопределения в классе
bool
методов
str
repr
.
В со
ответствии с интерпретацией этих значений значения выражений логи
ческого типа в
водятся в интерактивной оболочке как слова
True
False
, а не как числа
. Можно сч
тать, что логический тип делает истинные значения более явными.
ТИПЫ ДАННЫХ И
ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Логические значения
Например,
теперь бесконечный цикл можно оформить как
while True:
, а не как менее оч
видный
while 1:
. Точно так же более понятной становит
ся инициализация флагов, например
flag = False
.
Во всех остальных практических применениях значения
True
False
можно интерпретир
вать как предопределенные переменные с целочисленными зна
чениями
В любом случае, раньше большинство программистов создавали переменные
True
False
,
которым присваив
али значения
таким образом, тип
bool
просто следует этому ста
дартному приему.
Его реализация может приводить к неожиданным результатам: так как
True
это всего лишь целое значение
, которое выводится на экран особым образом, в
ражение
True + 4
языке
Python
даст результат
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Логические значения
Пример:
��� isinstance(True, int)
>>> True == 1 # То же самое значение
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
ЧИСЛА.
Числовые расширения
омимо встроенных числовых типов
язык
Python
мож
встретить различные свободно
распространяемые расширения сторон
них разработчиков, реализующие еще более экзот
ческие числовые типы. По
скольку числовая обработка данных является популярной обл
стью примене
ния языка
Python
,
можно
найт
массу дополнительн
ых инструментов
Например, для реализации массивных вычислений можно использовать рас
ширение
NumPy
Numeric
Python
), предоставляющее дополнительные воз
можности, такие как реализация
матричных и векторных операций, и обшир
ные библиотеки реализации числе
нных алг
ритмов. Язык
Python
и расши
рение
NumPy
используется в таких известных организациях,
Los Alamos
NASA
, для реализации разнообразных задач, которые ранее были напис
ны на языках
C++
,
FORTRAN
Matlab
. Нередко комбинацию
Python
NumPy
рассма
ивают как свободную и более гибкую альтернативу пакету
Matlab
вы получаете прои
водительность расширения
NumPy
плюс язык
Python
и все его библиотеки.
асширение
NumPy
в на
стоящее время не входит в состав стандартной библиотеки
Python
и должно устанавливаться отдельно.
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Как
упоминалось ранее
, в сценариях на языке
Python
не производится объявление объектов опред
ленных типов.
В действительно
сти нам даже не приходится беспокоиться о конкретных типах;
более того, они могут
применяться в более широком диапазоне ситуаций, чем можно было бы предусмотреть заранее.
Поскольку динамическая типизация составляет осно
ву этой гибкости, коротко ознакомимся с этой
моделью.
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Отсутствие инструкций объявления
В отличие от
компилирующи
язык
или языка
, обладающи
статической типизацией, таки
как
C, C++ или Java,
Python
использ
уются
переменные,
без
объявл
ения
сами
их тип
пример, когда вводится инструкция
a = 3 в интерактивной оболочке интерпре
татора или в файле
сценария, как интерпретатор Python узнает, что речь идет о целом числе? И вообще, как Python узнает,
что есть что?
Типы данных в языке Python определяются автоматически во время выполнения, а не в
результате
объявлений в программном коде. Это означает, что не требуется заранее объявлять переменные
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Переменные, объекты и ссылки
Как было видно ранее, когда выпол
няется операция присваивания, такая как
,
интерпретатор выпо
няет ее, хотя перед этим ему нигде не сообщалось, что
это имя переменной, или что она представляет
объект целочисленного типа. В языке
Python
все это решает
ся весьма естественным способом:
Создание переменной
Переменная (то есть и
мя), такая как
, создается автоматически, когда ей впервые присваивается зн
чение. Все последу
ющие операции присваивания просто изменяют значение, ассоциированное с уже
созданным именем.
Т.о.,
переменные создаются первой операцией присваивания.
Типы переменных
Переменные не имеют никакой информации о типе или ограничениях, свя
занных с ним. Понятие т
па присуще объектам, а не именам. Переменные являются лишь ссылка
ми на конкретные объекты в
конкретные моменты времени.
Использование переменной
Когда переменная участвует в выражении, ее имя замещается объектом, на который она ссылается,
независимо от того, что это за объект.
режде чем переменную можно будет использовать, ей дол
но быть присвоено значение
использование неинициализированной пер
еменной приведет к ошибке.
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Переменные, объекты и ссылки
В итоге
переменные создаются при выпол
нении операции присваивания,
могут ссылаться на объекты любых типов
им должны быть присвоены некоторые значения, прежде чем к
ним можно будет обратиться.
ример
сли ввести ин
струкцию:
Следующие этапы отражают все операции присваивания в языке Python:
Создается объект, представляющий число 3.
Создается переменная a, если она еще отсутствует.
В переменную a
записывается ссылка на вновь созданный объект, представ
ляющий число 3.
В результате,
переменные и объекты хранятся в разных частях памяти и связаны между собой ссы
кой. Переменные всегда ссылаются на объекты и никогда
на другие переменные, но крупные об
ты могут ссылаться на другие объекты (например, объект списка содержит ссылки на объекты, кот
рые включены в список).
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Переменные, объекты и ссылки
Таким образом,
терминах
Python
Переменные
это записи в системной таблице, где предусмотрено место для хранения ссылок
на объекты.
Объекты
это области памяти с объемом, достаточным для представления значений этих объе
тов.
Ссылки
это автоматически разыменовываемые указатели на объекты.
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Информация о типе
Рассмотрим тройную
операци
присваивания одной и той же переменной:
начала создается целое число, потом строка и, наконец, вещественное число.
В языке
Python
имена не имеют типов,
тип
это свойство объекта, а не имени.
Тогда в примере
выше
просто изменя
тся ссылк
на объект
разный типов
С другой стороны, объекты
знают, к какому типу они относятся,
каждый объект содержит поле, в
котором хранится информация о его типе. Целочис
ленный объект
, например
будет содержать зн
чение
плюс информацию, которая сообщит интерпретатору
Python
, что объект является целым чи
лом. Описатель типа для строки
указывает на строковый тип. Поскольку информация о типе
хранится в объ
ектах, ее не нужно хранить в переменных.
Благодаря этому
программный код на языке
Python
обладает более высокой гибкостью.
ДИНАМИЧЕСКАЯ
ТИПИЗАЦИЯ
Автоматическое уничтожение объектов
В предыдуще
м примере
мы присв
или одной и той же перемен
ной объекты различных типов.
Но что происходит с прежним значением, когда выполняется новое присваивание?
сякий раз, когда имя ассоциируется с
новым объектом, ин
терпретатор
Python
освобождает память,
занимаемую предыдущим объектом (если на него не ссылается
како
о друго
ени
или объект
).
Такое автома
тическое освобождение памяти, занимаемой объектами, называется
сборкой мусора
(garbage col
lection).
После каждого присваивания
с именем
переменной
связывается объект
нового
типа.
Каждый раз, когда имя
переменной
ассоциируется с новым объектом, интерпретатор
thon
освоб
ждает пространство, занятое прежним объектом.
Достигается это за счет
того, что в каждом объекте имеется счетчик ссылок, с помощью которого и
терпретатор следит за количеством ссылок, указываю
щих на объект в настоящий момент времени.
Как только значение счетчика достигает нуля, память, занимаемая объектом, авто
матически ос
вобо
дается.
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Автоматическое уничтожение объектов
Основная выгода от сборки мусора состоит в том, что программист может сво
бодно распоряжаться
объектами, не будучи обязан освобождать память в сво
ем сценарии. Интерпретатор
сам будет выпо
нять очистку неиспользуемой па
мяти в ходе выполнения программы.
еханизм сборки мусора способен также обнаруживать и удалять объекты с циклическими ссыл
ками.
Эту особенность можно отключить, если вы уверены, что в программе не создаются о
бъекты с цикл
ческими ссылками, но по умолчанию она включена.
Поскольку ссылки реализованы в виде указателей, существу
ет возможность создать в объекте ссылку
на самого себя или на другой объект, который ссылается сам на себя.
ДИНАМИЧЕСКАЯ ТИПИЗА
Разделяемые ссылки
Теперь введем в действие еще одну переменную:
В результате переменные a и b ссылаются на один и тот же объект (то есть указывают на одну и ту же
область в памяти). В языке
Python
это называется
разделяемая ссылка
несколько имен ссылаются
на один и тот же объект.
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки
Далее добавим еще одну инструкцию:
результате
создается новый объект, представляющий строку
, а ссылка на него записывае
ся в переменную
. Однако эти действия не оказы
вают влияния на переменную b
она по
прежнему
ссылается на первый объ
ект, целое число
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки
Аналогичная ситуация возникает, даже если тип объекта не изменяется:
В этой последовательности происходят те же самые события: интерпретатор Python создает переме
ную
и записывает в нее ссылку на объект
. После это
го он создает переменную
и записывает в
нее ту же ссылку, что хранится в пе
ременной
. Наконец, последняя инструкция создает совершенно
новый объект (в данном случае
целое число
, которое является рез
ультатом выполнения операции
сложения). Это не приводит к изменению переменной
Переменные в языке
Python
, в отличие от других языков программирования, всегда являются указ
телями на объекты, а не метками областей памяти, до
ступных для изменения: запи
сь нового значения
в переменную не приводит к изменению первоначального объекта, но приводит к тому, что переме
ная начинает ссылаться на совершенно другой объект. В результате инструкция присваивания может
воздействовать только на одну переменную.
ДИНА
МИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки и изменяемые объекты
уществуют такие объекты и операции, которые приводят к изменению самих объектов.
Например, опе
рация присваивания значения элементу списка фактически изменяет сам спи
сок вместо
того,
чтобы создавать совершенно новый объект списка.
При рабо
те с объектами, допускающими такие изменения, необходимо быть особенно внимательными
при использовании разделяемых ссылок, так как изменение одного имени может отразиться на других
именах.
Рассмо
трим пример.
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки и изменяемые объекты
Пример
&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000; L2 = L1 &#x/MCI; 15;&#x 000;&#x/MCI; 15;&#x 000;L1
это список, содержащий объекты 2, 3 и 4
L1[0] ссылается на объект 2. После выполнения
второй инс
L1 и L2 будут ссылаться на один и тот же объект
. Е
сли теперь добавить еще одну инструкцию:
переменная L1 будет ссылаться на другой объект, а L2 по
прежнему будет ссы
латься на первоначальный
список. Однако если синтаксис последней инструк
и чуть
чуть изменить, эффект получится радикально
другим:
# Создание второй ссылки на тот же самый объект
# Изменение объекта &#x/MCI; 21;&#x 000;&#x/MCI; 21;&#x 000;&#x/MCI; 21;&#x 000;&#x/MCI; 21;&#x 000;&#x/MCI; 21;&#x 000; L1 # Переменная L1 изменилась &#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000;[24, 3, 4] &#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000; L2 # Но так же изменилась и переменная L2!
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки и изменяемые объекты
но потребовать от интерпретатора, чтобы вместо создания ссылок он выполнял копиров
ние объектов.
Скопировать список можно несколькими способами, включая встроенную функцию
list
и модуль
copy
из стандартной библиотеки. Однако самым стандартным способом копирования является получение
среза от начала и до конца списка:
&#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000; L2 = L1[:] # Создается копия списка L1 &#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000; L1[0] = 24 &#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000; L1 &#x/MCI; 19;&#x 000;&#x/MCI; 19;&#x 000;[24, 3, 4] &#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000; L2 # L2 не изменилась &#x/MCI; 21;&#x 000;&#x/MCI; 21;&#x 000;[2, 3, 4] &#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000;Здесь изменения в L1 никак не отражаются на L2, потому что L2 ссылается на копию объекта, на к
торый ссылается переменная L1. То есть эти переме
нные указывают на различные области памяти.
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки и изменяемые объекты
пособ, основанный на получении среза, неприменим в случае с другим изменяемым базовым типом
со словарями, потому что сло
вари не
являются последовательностями. Чтобы скопировать словарь,
необхо
димо воспользоваться методом
X.copy()
. Следует также отметить, что модуль
copy
из ста
дартной библиотеки имеет в своем составе универсальную функ
цию, позволяющую копировать об
екты любых тип
ов, включая вложенные структуры:
# Создание “поверхностной” копии любого объекта Y
X = copy.deepcopy(Y) # Создание полной копии: копируются все вложенные части
Таким образом,
объекты, допускающие изменения в них самих
всегда подвержены описанным э
фектам. В число таких объектов в языке
Python
попадают списки, словари и некоторые объекты, объ
явленные с помощью инструкции
class
. Если такое поведение является неже
лательным,
достаточно
просто копировать объекты.
ДИНАМ
ИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки и равенство
Рассмотрим сле
дующие инструкции:
>>> x = ‘shrubbery’ # Объект 42 теперь уничтожен?
Так как интерпретатор
Python
кэширует и повторно использует малые целые числа и небольшие строки
,
объект
скорее все
го не будет уничтожен. Он, вероятнее всего, останется в системной таблице для п
вторного использования, когда вновь сгенерируется число
в программ
ном коде.
Однако большинство объектов уничтожаются немедленно, как толь
ко будет по
теряна последняя ссылка,
особенно те, к которым применение меха
низма кэширования не имеет смысла.
Например, согласно модели ссылок в языке
Python
, существует два разных способа выполнить проверку
равенства.:
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки и равенство
Первый способ, основанный на использовании оператора
, проверяет, равны ли
значения объектов.
В языке Python практически всегда используется имен
но этот способ.
Второй способ, основанный на использовании оператора
, про
веряет идентичность объектов. Он
возвращает значение
, только если оба имени ссылаются на один и тот же
объект, вследствие
этого он является более строгой формой проверки равенства.
На самом деле оператор
просто сравнивает указатели, которые реализуют ссылки, и тем самым
может использоваться для выявления разделяемых ссы
лок в программном коде. Он возвр
ащает знач
ние
, даже если имена ссы
лаются на эквивалентные, но разные объекты, как, например, в сл
дующем случае, когда выполняются два различных литеральных выражения:
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки и равенство
сли те же самые действия выполняются над ма
лыми целыми числами
, то
В этом примере переменные
должны быть равны (
, одно и то же значе
ние), но не эквивален
ны (
, один и тот же объект)
, потому что было выполне
но два разных литеральных выражения. О
нако из
за того, что малые целые числа и строки кэшируются и используются повторно, оператор
сообщает, что переменные ссылаются на один и тот же объект.
ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ
Разделяемые ссылки и равенство
сли
же есть необходимость
взглянуть на работу внутренних механизмов, мож
запросить у инте
претатора количество ссылок на объект: функция
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ
тобы
иметь большую возможность судить о встроенных типах, перейдем к строкам.
Строки используются для записи текстовой информации, а также произволь
ных последов
тельностей байтов.
По
следовательности поддерживают порядок размещения элементов, которые они содер
жат,
слева направо: элементы сохраняются и извлекаются исходя из их позиций в последов
тельностях.
Строго говоря, строки являются последова
тельностями односимвольных строк.
Другими типами последовательностей являются
списки
кортежи
ТИПЫ ДАННЫХ И ОП
ЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
Как
последовательности, строки поддерживают операции, предполага
ющие определенный
порядок позиционирования элементов. Например, если имеется четырехсимвольная строка,
то с помощью встроенной функции
len
можно определить ее длину, а отдельные элементы
строки извлечь с помощью выражений индексирования:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
В языке
Python
индексация начинается с 0: первый элемент имеет индекс 0, второй
1 и
так далее.
И здесь снова мы видим
, что в язы
Python
не требуется объявлять переменные заранее.
Переменная создается в тот момент, когда ей присваивается значение, при этом
переменной
можно присвоить значение любого типа,
после чего она становится переменной этого типа.
ри использовании внутри выражения имя переменой замещается ее фактическим значен
ем.
режде чем появится возможность обратиться к переменной, ей должно быть
присвоено
какое
либо значение.
Переменные необходимы,
чтобы сохранить объ
ект для последующего использования, его
нужно присвоить переменной.

ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
В языке
Python
предусмотрена возможность индексации в обратном порядке, от конца к
началу
положительные индексы откладываются от левого конца последовательности, а
отрицательные
от правого:
-1] # Последний элемент в конце S &#x/MCI; 13;&#x 000;&#x/MCI; 13;&#x 000;‘m’ &#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000; S[-2] # Второй элемент с конца &#x/MCI; 15;&#x 000;&#x/MCI; 15;&#x 000;‘a’ &#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000;Формально отрицательные индексы просто складываются с длиной строки
ледующие две
операции эквивалентны:

ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
нутри квадратных скобок допускается использовать не только жестко заданные числовые
литералы, но и любые другие выражения
везде, где
Python
ожидает получить значение,
можно использовать литералы, переменные или любые выражения. Весь синтаксис языка
Pytho
следует это
му общему принципу.
Строки
поддерживают
также
более общую форму
индексирования
диапазоном
, извест
ную
ещё
получение среза
(slicing), которая обеспечивает возможность извлече
ния за
одну операцию целого сегмента (среза). Например:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
о умолчанию
ри срез
левая граница равн
нулю, а правая
длине последовательности.
Т.о.
мы
можем выполнять
следующие наиболее распро
страненные
дей
твия
:
>>> S # Сама строка S без изменений
>>> S[1:] # Все, кроме первого элемента
&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;1:len(S)&#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;]&#x/MCI; 19;&#x 000;&#x/MCI; 19;&#x 000; &#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;‘pam’ &#x/MCI; 21;&#x 000;&#x/MCI; 21;&#x 000;>>> S[0:3] # Все, кроме последнего элемента
-1] # Еще раз все, кроме последнего элемента, но проще
&#x/MCI; 27;&#x 000;&#x/MCI; 27;&#x 000;0:-1&#x/MCI; 28;&#x 000;&#x/MCI; 28;&#x 000;]&#x/MCI; 29;&#x 000;&#x/MCI; 29;&#x 000; &#x/MCI; 30;&#x 000;&#x/MCI; 30;&#x 000;‘Spa’ &#x/MCI; 31;&#x 000;&#x/MCI; 31;&#x 000;>>> S[:] # Все содержимое S, как обычная копия
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностя
троки поддерживают операцию кон
катенации
(объединение двух строк в одну строку),
помощью
знака
‘+’
и операцию повторения (новая строка создается за счет много
кратного
повторения другой строки)
с помощью знача
‘*’
:
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями


Таким образом, мы видим, что знак
плюс (+) имеет различное значение для разных объе
тов: для чисел
сложение, а для строк
конкатенация.
Это универсаль
ное свойство языка
Python
, которое называется
полимор
физмом
, и означ
ет, что фактически выполняемая операция зависит от объек
тов, кото
рые принимают в ней
участие.
Такой полиморфизм в значитель
ной степени обеспечивает выразительность и гибкость пр
граммного кода на языке
Python
, так как отсутствуют ограничения, связанные с типами.
Опе
рации в языке
Python
обычно в состоянии автоматически
обрабатывать объек
ты самых
разных типов, при условии, что они поддерживают совместимый ин
терфейс.
В языке
Python
идея полиморфизма является ключевой концепцией.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
Базовые
перации
Конкатенация (сложение)
Дублирование строки
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
Длина строки (функция
len)
Доступ по индексу
&#x/MCI; 25;&#x 000;&#x/MCI; 25;&#x 000;'s' &#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000; S[2] &#x/MCI; 27;&#x 000;&#x/MCI; 27;&#x 000;'a' &#x/MCI; 28;&#x 000;&#x/MCI; 28;&#x 000;&#x/MCI; 28;&#x 000;&#x/MCI; 28;&#x 000;&#x/MCI; 28;&#x 000; S[-2] &#x/MCI; 29;&#x 000;&#x/MCI; 29;&#x 000;'a' &#x/MCI; 30;&#x 000;&#x/MCI; 30;&#x 000;Как видно из примера, в Python возможен и доступ по отрицательному индексу, при этом
отсчет идет от конца строки.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
Извлечение среза
Оператор извлечения среза:
– начало среза, а
окончание;
символ с номером
в срез не входит. По умолчанию первый индекс равен
, а второй
длине строки.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
Кроме того, можно задать шаг, с которым нужно извлекать срез.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
Другие функции и методы строк
При вызове методов необходимо помнить, что строки в Python относятся к категории неи
меняемых
последовательностей, то есть все функции и методы могут лишь создавать новую
строку.
&#x/MCI; 15;&#x 000;&#x/MCI; 15;&#x 000;Traceback (most recent call last): &#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000; File "", line 1, in &#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000; s[1] = 'b' &#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;TypeError: 'str' object does not support item assignment &#x/MCI; 19;&#x 000;&#x/MCI; 19;&#x 000;&#x/MCI; 19;&#x 000;&#x/MCI; 19;&#x 000;&#x/MCI; 19;&#x 000; s = s[0] + 'b' + s[2:] &#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000; s &#x/MCI; 21;&#x 000;&#x/MCI; 21;&#x 000;'sbam' &#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000;Поэтому все строковые методы возвращают новую строку, которую потом следует присв
ить переменной.
ТИПЫ ДАННЫХ И ОПЕРАЦИИ НАД НИМИ
СТРОКИ.
Операции над последовательностями
Таблица "Функции и методы строк"
Функция или
метод
Назначение
S = 'str'; S = "str"; S =
'''str'''; S = """str"""
Литералы строк
S = "s
ta
nbbb"
Экранированные последовательности
匀 㴠爀≃㨀
琀e洀瀀
渀敷∀
Неформатированные строки (подавляют экранирование)
匀 㴠b≢礀琀攢
Строка
байтов
匀1 ⬠匀2
Конкатенация (сложение строк)
匀ㄠ⨠3
Повторение строки

СТРОКИ
Функция или метод
Назначение
S[i]
Обращение по индексу
S[i:j:step]
Извлечение среза
len(S)
Длина строки
S.find(str, [start],[end])
Поиск подстроки в строке. Возвращает номер первого вхожд
ния или
S.rfind(str, [start],[end])
Поиск подстроки в
строке. Возвращает номер последнего вхо
дения или
S.index(str, [start],[end])
Поиск подстроки в строке. Возвращает номер первого вхожд
ния или вызывает ValueError

СТРОКИ
Функция или метод
Назначение
S.rindex(str, [start],[end])
Поиск
подстроки в строке. Возвращает номер последнего вхо
дения или вызывает ValueError
S.replace(шаблон, замена)
Замена шаблона
S.split(символ)
Разбиение строки по разделителю
匀.i猀搀i最i琀⠀⤀
Состоит ли строка из цифр
匀.i猀愀l瀀栀愀⠀⤀
Состоит ли строка из букв
匀.i猀愀l渀甀洀⠀⤀
Состоит ли строка из цифр или букв
匀.i猀lo眀e爨⤀
Состоит ли строка из символов в нижнем регистре

СТРОКИ
Функция или метод
Назначение
S.isupper()
Состоит ли строка из символов в верхнем регистре
S.isspace()
Состоит ли строка из
неотображаемых символов (пробел, си
вол перевода страницы ('
f'), "новая строка" ('
n'), "перевод к
ретки" ('
r'), "горизонтальная табуляция" ('
t') и "вертикальная
табуляция" ('
v'))
S.istitle()
Начинаются ли слова в строке с заглавной буквы
匀.異瀀e爀⠀⤀
реобразование строки к верхнему регистру
匀.lo眀e爀⠩
Преобразование строки к нижнему регистру
匀.猀琀愀爀琀猀眀i琀栀⠀猀琀爀⤀
Начинается ли строка S с шаблона str

СТРОКИ
Функция или метод
Назначение
S.endswith(str)
Заканчивается ли строка S шаблоном str
S.join(список)
Сборка строки из списка с разделителем S
ord(символ)
Символ в его код ASCII
chr(число)
Код ASCII в символ
S.capitalize()
Переводит первый символ строки в верхний регистр, а все о
тальные в нижний
S.center(width, [fill])
Возвращает
отцентрованную строку, по краям которой стоит
символ fill (пробел по умолчанию)

СТРОКИ
Функция или метод
Назначение
S.count(str, [start],[end])
Возвращает количество непересекающихся вхождений подстр
ки в диапазоне [начало, конец] (0 и длина
строки по умолчанию)
S.expandtabs([tabsize])
Возвращает копию строки, в которой все символы табуляции
заменяются одним или несколькими пробелами, в зависимости
от текущего столбца. Если TabSize не указан, размер табуляции
полагается равным 8 пробелам
S.lstrip([chars])
Удаление пробельных символов в начале строки
匀.牳琀物瀀⠀季栀愀牳崀⤀
Удаление пробельных символов в конце строки
匀.猀琀物瀀⡛挀栀愀爀猀崀⤀
Удаление пробельных символов в начале и в конце строки


СТРОКИ
Функция или метод
Назначение
S.partition(шаблон)
Возвращает кортеж, содержащий часть перед первым шабл
ном, сам шаблон, и часть после шаблона. Если шаблон не на
ден, возвращается кортеж, содержащий саму строку, а затем две
пустых строки
S.rpartition(sep)
Возвращает кортеж, содержащий
часть перед последним ша
лоном, сам шаблон, и часть после шаблона. Если шаблон не
найден, возвращается кортеж, содержащий две пустых строки, а
затем саму строку
S.swapcase()
Переводит символы нижнего регистра в верхний, а верхнего

S.title()
ервую букву каждого слова переводит в верхний регистр, а все
остальные в нижний
СТРОКИ
Функция или метод
Назначение
S.zfill(width)
Делает длину строки не меньшей width, по необходимости з
полняя первые символы нулями
S.ljust(width, fillchar="
Делает длину строки не меньшей width, по необходимости з
полняя последние символы символом fillchar
S.rjust(width, fillchar=" ")
Делает длину строки не меньшей width, по необходимости з
полняя первые символы символом fillchar
S.format(*args, **kwargs)
Форматирование строки
СТРОКИ
Литералы строк
Работа со строками в Python очень удобна. Существует несколько литералов строк.
Строки в апострофах и в
кавычках
Строки в апострофах и в кавычках
одно и то же.
Причина наличия двух вариантов в том,
чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не испол
зуя экранирование.

СТРОКИ
Экранированные
последовательности
служебные символы
Экранированные последовательности позволяют вставить символы, которые сложно ввести
с клавиатуры.
Экранированная последовательность
Назначение
Перевод строки
Звонок
Забой
Перевод страницы
Возврат
каретки
Горизонтальная табуляция
Вертикальная табуляция
一笀i搀紀
Идентификатор ID базы данных Юникода
甀桨桨
битовый символ Юникода в 16
ричном пре
ставлении
СТРОКИ
Экранированная последовательность
Назначение
Uhhhh…
битовый
символ Юникода в 32
ричном пре
ставлении
x桨
ричное значение символа
o潯
ричное значение символа
Символ Null (не является признаком конца стр
ки)
СТРОКИ
"Сырые" строки
подавляют экранирование
Если перед открывающей кавычкой стоит символ
(в любом регистре), то механизм э
ранирования отключается.
Но, несмотря на назначение, "сырая" строка не может заканчиваться символом обратного
слэша. Пути решения:
СТРОКИ
Строки в тройных апострофах или кавычках
Главное достоинство строк в тройных кавычках в том, что их можно использовать для зап
си многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и
апострофов, главное, чтобы не было трех кавычек подряд.
СТРОКИ
Форматирование строк. Метод format
Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, по
ставив в неё некоторые данные, полученные в процессе выполнения программы (пользов
тельский ввод, данные из файлов и т. д.). Подстановку данных можно сделать с помощью
форматирования строк. Форматирование можно сделать с помощью оператора %, либо с
помощью метода
Форматирование строк с помощью метода format
Если для подстановки
требуется только один аргумент, то значение
сам аргумент:
СТРОКИ
А если несколько, то значениями будут являться все аргументы со строками подстановки
(обычных или именованных):
СТРОКИ
Однако метод
умеет большее. Вот его синтаксис:
Теперь спецификация формата:
СТРОКИ
Например:
() &#x/MCI; 11;&#x 000;&#x/MCI; 11;&#x 000;'Units destroyed: 1' &#x/MCI; 12;&#x 000;&#x/MCI; 12;&#x 000;&#x/MCI; 12;&#x 000;&#x/MCI; 12;&#x 000;&#x/MCI; 12;&#x 000; "Units destroyed: {players[0]!r}".format(players = ['1', '2', '3']) &#x/MCI; 13;&#x 000;&#x/MCI; 13;&#x 000;"Units destroyed: '1'" &#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000; &#x/MCI; 15;&#x 000;&#x/MCI; 15;&#x 000;Выравнивание производится при помощи символа
заполнителя.
СТРОКИ
Доступны след
ующие варианты выравнивания:
Флаг
Значение
''
Символы
заполнители будут справа (выравнивание об
екта по левому краю) (по умолчанию).
�''
выравнивание объекта по правому краю.
✽'
Заполнитель будет после знака, но перед цифрами. Раб
тает только с
числовыми типами.
'^'
Выравнивание по центру.
СТРОКИ
Опция "знак" используется только для чисел и может принимать следующие значения:
Флаг
Значение
'+'
Знак должен быть использован для всех чисел.
' для отрицательных, ничего для
положительных.
'Пробел'
' для отрицательных, пробел для положительных.
СТРОКИ
Поле "тип" может принимать следующие значения:
Тип
Значение
'd', 'i', 'u'
Десятичное число.
❯'
Число в восьмеричной системе счисления.
❸'
Число в
шестнадцатеричной системе счисления (буквы в нижнем регистре).
❘'
Число в шестнадцатеричной системе счисления (буквы в верхнем регистре).
❥'
Число с плавающей точкой с экспонентой (экспонента в нижнем регистре).
❅'
Число с плавающей точкой с экспонен
той (экспонента в верхнем регистре).
СТРОКИ
Тип
Значение
'f', 'F'
Число с плавающей точкой (обычный формат).
'g'
Число с плавающей точкой. с экспонентой (экспонента в нижнем регистре), если она
меньше, чем
4 или точности, иначе обычный формат.
'G'
Число с плавающей точкой. с экспонентой (экспонента в верхнем регистре), если она
меньше, чем
4 или точности, иначе обычный формат.
'c'
Символ (строка из одного символа или число
код символа).
'猧
Строка.
'┧
Число умножается на 100, отображает
ся число с плавающей точкой, а за ним знак %.
СТРОКИ
Неизменяемость
троки в языке
Python
являются неизменяемыми
после того, как строка будет создана, ее
нельзя изменить.
Все операции над строками в ре
зультате создают новую строку
не изм
оригинальн
Например, не
льзя
изменить строку присвоением значения одной из ее позиций, но всегда
мож
создать новую строку и присвоить ей то же самое имя.
Поскольку
Python
очищает память, занятую ненужными больше объек
тами
, это
вполне
фективн
ое средство
изменения
строк
:
��� S[0] = ‘z’ #
��� S = ‘z’ + S[1:] #
СТРОКИ
Все объекты в языке
Python
либо относятся к классу неизменяемых, либо нет.
Если говорить о базовых типах, то числа, строки и кортежи являются неизме
няемыми, а
списки и словари
нет (они легко могут изменяться в любой своей части). Помимо всего
неизменяемость может рассматриваться
как гарантия, что некоторый объект будет ост
ваться постоянным на протяжении работы программы.
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
В версии Python 2.4 также появился новый тип коллекций
множество
упорядоченная
коллекция уникальных и
неизменяемых объектов, которая поддерживает операции, соо
ветствующие математической теории множеств
аждый элемент может присутствовать в множестве в един
ственном экземпляре независ
мо от того, сколько раз он будет добавлен.
Мно
жества могут
применяться в самых разных прикладных областях, но особенно часто
они используются в приложениях обработки числовых данных и при ра
боте с базами да
ных.
Так как множества
явля
тся коллекци
ями
других объектов, он
как
списки
и словари,
под
держивают и
терации, могут изменяться в размерах при необходимости и мо
гут соде
жать объекты разных типов.
ножество на
поминает словарь, ключи в котором не имеют значений, но поддерживает ряд
дополнительных операций.
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Основы
множеств в Python 2.6
В настоящее время существует несколько способов создания объекта множе
ства, которые
зависят от того, какая версия Python используется
2.6 или 3.0.
Чтобы создать объект множества, нужно передать после
довательность или другой объект,
поддерживающий возможность итераций по его содержимому, встроенной функции
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Основы множеств в Python 2.6
ти операции не могут выполняться над простыми последовательностями
чтобы испол
зовать их,
необходимо
создать из них множества:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Основы множеств в Python 2.6
Кроме
операторов выражений, объекты множеств обладают ме
тодами, которые реализуют
ряд операций
обеспечи
ваю
щих
изменение самих множеств,
метод
add
вставляет новый
элемент в
мно
жество, метод
update
выполняет объединение, а метод
remove
удаляет
элемент по
его значению
и т.д.
Допустим, что пе
ременные
сохранили свои значения,
присвоенные в предыдущем примере интерактивного сеанса:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Основы множеств в Python 2.6
Так как множества являются
итерируемыми контейнерами
данных, они
могут передаваться
функ
len
, использоваться в циклах
for
и в генераторах списков.
Однако
так как множества являются неупорядоченными коллекциями, они не поддерж
вают операции над
строками
, такие как индексирование и извлечение среза:
СТРУКТУРЫ
ДАННЫХ
. К
ОЛЛЕКЦИИ.
НОЖЕСТВА
Основы множеств в Python 2.6
Наконец, о
ператоры выражений обычно применяются к двум множествам, однако родс
венные им методы ча
сто способны работать с любыми объектами итерируемых типов:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Литералы множеств в Python 3.0
Python 3.0
сохранилась возможность ис
пользовать встроенную функцию
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Литералы множеств в Python 3.0
Примеры:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Литералы множеств в Python 3.0
Примеры:
Все операции
над множествами в верси
2.6 и
3.0 действуют
одинаково
, но вывод резул
татов выглядит несколько иначе:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Литералы множеств в Python 3.0
Примеры:
онструкция {} создает пустой словарь. Чтобы создать пустое множество, следует вызвать
встроенную функцию
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Литералы множеств в Python 3.0
ножества в версии 3.0 поддерживают те же методы
, что
и в
Python 2.6
, часть из которых
способна
принимать итерируе
мые объекты в качестве операндов:
��� {1, 2, 3} | {3, 4}
��� {1, 2, 3} | [3, 4]
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Ограничения, связанные с неизменяемостью
и фиксированные
множества
Множества
это гибкие и мощные объекты, но они имеют одно ограничение
Из
за особенностей реализации множества могут включать объекты только неизм
няемых типов.
Т.е.,
списки и словари не могут добавляться в множества, однако мож
использовать ко
тежи, если появится необходимость сохранять составные значения.
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Ограничения, связанные с неизменяемостью
и фиксированные множества
Примеры:
S.add([1, 2, 3]) # Ошибка: Добавление изменяемого объекта
TypeError: unhashable type: ‘list’
��� S.add({‘a’:1})
TypeError: unhashable type: ‘dict’
��� S.add((1, 2, 3))
>>> (1, 2, 3) in S # Членство: выявляется по полным значениям
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
НОЖЕСТВА
Ограничения, связанные с неизменяемостью
и фиксированные множества
Кортежи в множествах могут использоваться, например, для хранения дат, записей, IP
адресов и так далее.
Сами по себе множества являются изменяемыми объ
ектами и потому не
могут вкладыват
ся в другие множества, однако, если потребуется сохранить одно множество внутри друг
го, создайте множество с помощью встроенной функции
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
МНОЖЕСТВА.
Генераторы множеств в Python 3.0
генераторах
подробнее будет сказано отдельно. А пока попытаемся воспринять информ
цию, как должное.
Кроме литералов, в версии 3.0 появилась конструкция генератора множеств. По своему в
ду она напоминает конструкцию генератора списков;
только генератор множеств за
ключен
не в квадратные, а в фигурные скобки, и в результате создает множе
ство, а не список
Генератор множеств выполняет цикл и собирает результаты выражения в каждой итерации
доступ к значению в текущей итерации обе
спечивает переменная цикла. Результатом р
боты генератора является новое множество, обладающее всеми особенностями обычного
мно
жества:
Цикл, который генерирует значения, находится в этом выражении справа, а выражение,
осуществляющее формирование окончательных значений,
слева (
СТРУКТУРЫ
ДАННЫ
. КОЛЛЕКЦИИ.
МНОЖЕСТВА.
Генераторы множеств в Python 3.0
В генераторах можно также использовать другие виды итерируемых объектов, такие как
строки:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
МНОЖЕСТВА.
Где могут использоваться множества?
Помимо математических вычислений множества могут использоваться еще в целом ряде
прикладных областей.
Ввиду уникальности
элементов, множества можно использовать для фильтрации по
вторяющихся значений в других коллекциях. Для этого достаточно просто преобраз
вать коллекцию в множество, а затем выполнить обратное преобра
зование (так как
множества являются итерируемыми объекта
ми, их можно передавать, например,
функции
list
):
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
МНОЖЕСТВА.
Где могут
использоваться множества?
Множества могут также использоваться для хранения пунктов, которые уже были п
сещены в процессе обхода графа или другой циклической структуры.
Например, транзитивный загрузчик модулей и программа вывода дерева на
следования,
должны запоминать элементы, которые уже были посещены, чтобы избежать зациклив
ния.
Посещенные элементы достаточно эффективно можно запоми
нать в виде ключей словаря,
однако множества предлагают еще более эффек
тивный эквивалент (и для многих
более
прост
ой).
Наконец, множества использовать при работе с большими массивами данных (напр
мер, с результатами запроса к базе данных)
операция пере
сечения двух множеств
позволяет получить объекты, присутствующие сразу в обеих категориях, а объедин
ние
все объ
екты, присутствующие в любом из множеств.
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
МНОЖЕСТВА.
Где могут использоваться множества?
Пример:
Пусть дан
спис
к людей
служащих гипотетической компании:
# Кто одновременно является
# инженером и менеджером?
# Все сотрудники из обеих категорий
# Инженеры, не являющиеся менеджерами
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
МНОЖЕСТВА.
Где могут использоваться множества?
# Менеджеры, не являющиеся инженерами
# Все менеджеры являются инженерами?
# (надмножество)
# Оба сотрудника
# Множество всех сотрудников
надмножеством менеджеров?
# Сотрудники, принадлежащие к какой
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
МНОЖЕСТВА.
Дополнительные операции и методы
Нахождение, объединение, пересечение.
len(s)
число элементов в множестве (размер множества).
x in
принадлежит ли
множеству
set.isdisjoint(other)
истина, если
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
МНОЖЕСТВА.
Дополнительные операции и методы
И операции, непосредственно изменяющие множество:
set.update(other, ...)
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СПИСКИ. Понятие списков
Списки в Python
упорядоченные
изменяемые
коллекции объектов произвольных типов
(почти как массив, но типы могут отличаться).
Чтобы использовать списки, их нужно создать. Создать список можно несколькими спос
бами. Например, можно обработать любой итерируемый объект (например,
строку
) встр
енной функцией
Список можно создать и при помощи литерала:
>>> s = [] # Пустой с
��� l = ['s', 'p', ['isok'], 2]
&#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000; l &#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000;['s', 'p', ['isok'], 2]
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СПИСКИ. Понятие списков
Как видно из примера, список может содержать любое количество любых объектов
(в том
числе и вложенные списки), или не содержать ничего.
И еще один способ создать список
это
генераторы списков.
Генератор списков
способ
построить новый список, применяя выражение к каждому элементу последовательности.
Генераторы списков очень п
охожи на
цикл
for
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СПИСКИ.
Понятие списков
Возможна и более сложная конструкция генератора списков:
&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000;&#x/MCI; 14;&#x 000; c &#x/MCI; 15;&#x 000;&#x/MCI; 15;&#x 000;['lll', 'sss', 'ttt'] &#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000;&#x/MCI; 16;&#x 000; c = [c + d for c in 'list' if c != 'i' for d in 'spam' if d != 'a'] &#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000; c &#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;['ls', 'lp', 'lm', 'ss', 'sp', 'sm', 'ts', 'tp', 'tm'] &#x/MCI; 19;&#x 000;&#x/MCI; 19;&#x 000;Но в сложных случаях лучше пользоваться обычным циклом
для генерации списков.
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СПИСКИ. Функции и методы списков
Функции и методы списков
Для списков доступны основные
встроенные функции
, а также методы списков.
Метод
Что делает
list.append(x)
Добавляет элемент в конец списка
li猀琀.ex琀e渀搀⠀L⤀
Расширяет список list, добавляя в конец все элементы
списка L
li猀琀.i渀猀e爀琀⠀i, x⤀
Вставляет на i
ый элемент значение x
li猀琀.爀e洀o瘀e⠀x⤀
Удаляет первый элемент в списке, имеющий значение x.
ValueError, если такого элемента не существует

СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СПИСКИ. Функции и методы списков


Метод
Что делает
list.pop([i])
Удаляет i
ый элемент и возвращает его. Если индекс не указан, удаляется п
следний элемент
list.index(x, [start [,
end]])
Возвращает положение первого элемента со значением x (при этом поиск в
дется от start до end)
list.count(x)
Возвращает количество элементов со значением x
list.sort([key=функция])
Сортирует список на основе функции
li猀琀⹲敶敲猀攨⤀
Разворачивает список
汩猀琮挀o瀀礀⠀⤀
Поверхностная копия списка
汩猀琮挀汥愀爀⠀⤀
Очищает список
СТРУКТУРЫ
ДАННЫХ
КОЛЛЕКЦИИ.
СПИСКИ. Функции и методы списков
Нужно отметить, что методы списков, в отличие от
строковых методов
, изменяют сам сп
сок, а потому
результат выполнения не нужно записывать в эту переменную.
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СПИСКИ. Примеры
римеры:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
АССИВЫ
. Модуль
array
Изредка, для увеличения производительности, списки заменяют гораздо менее гибк
массивами
(хотя в таких случаях обычно используют сторонние библиотеки, напр
мер
NumPy
Модуль
array
определяет массивы в
ython
. Массивы очень похожи на
списки
, но с огр
ничением на тип данных и размер каждого элемента.
Размер и тип элемента
в массиве определяется при его создании и может принимать сл
дующие значения:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
АССИВЫ
. Модуль
array


Код типа
Тип в /
Тип в python
Минимальный размер в байтах
'b'
signed char
int
'B'
unsigned char
int
'h'
signed short
int
'H'
unsigned short
int
'i'
signed int
int
'I'
unsigned int
int
'l'
signed long
int
'L'
unsigned long
int
'q'
signed long long
int
'Q'
unsigned long long
int
'f'
float
float
'd'
double
float
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
АССИВЫ
. Модуль
array
Класс
array.array(TypeCode [, инициализатор])
новый массив, элементы которого огр
ничены
TypeCode
, и инициализатор, который должен быть списком, объектом, поддерж
вающий интерфейс буфера, или итерируемый объект.
array.typecodes
строка, содержащая все возможные типы в массиве.
Массивы изменяемы. Массивы поддерживают все списковые методы (индексация, срезы,
умножения, итерации), и другие методы.
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
АССИВЫ
Методы массивов (array)
в Python
array.typecode
TypeCode
символ, использованный при создании массива.
array.itemsize
размер в байтах одного элемента в массиве.
array.append(х)
добавление элемента в конец массива.
array.buffer_info()
кортеж (ячейка памяти, длина). Полезно для низкоуровневых опер
array.byteswap()
изменить порядок следования байтов в каждом элементе массива. П
лезно при чтении данных из файла, написанного на машине с другим порядком байтов.
array.count(х)
воз
вращает количество вхождений
в массив.
array.extend(iter)
добавление элементов из объекта в массив.
array.frombytes(b)
делает массив
array
из массива байт. Количество байт должно быть
кратно размеру одного элемента в массиве.
СТРУКТУРЫ
ДАННЫХ
КОЛЛЕКЦИИ.
АССИВЫ
Методы массивов (array) в Python
array.fromfile(F, N)
читает
элементов из
файла
и добавляет их в конец массива. Файл
должен быть открыт на бинарное чтение. Если доступно меньше
элементов, генерируе
исключение
EOFError
, но элементы, которые были доступны, добавляются в массив.
array.fromlist(список)
добавление элементов из списка.
array.index(х)
номер первого вхождения
в массив.
array.insert(n, х)
включить новый пункт со значением
в массиве перед номером
. О
рицательные значения рассматриваются относительно конца массива.
array.pop(i)
удаляет
ый элемент из массива и возвращает его. По умолчанию удаляется
последний элемент.
array.remove(х)
удалить первое вхождение
из массива.
array.reverse()
обратный порядок элементов в массиве.
array.tobytes()
преобразование к байтам.
array.tofile(f)
запись массива в открытый файл.
array.tolist()
преобразование массива в список.
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
АССИВЫ
. Рациональность использования
Они используются редко, когда нужно достичь высокой скорости работы. В остальных сл
чаях массивы можно заменить другими типами данных:
списками
кортежами
строками
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
КОРТЕЖИ
. Применимость
Кортежи
это неизменяемые списки.
Зачем нужны кортежи, если есть списки?
Защита от дурака.
То есть кортеж защищен от изменений, как намеренных (что пл
хо), так и случайных (что хорошо).
Меньший размер.
Примеры
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
КОРТЕЖИ. Применимость
Возможность использовать кортежи в качестве ключей
словаря
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
КОРТЕЖИ. Работа с кортежами
абота
с кортежами п
римерно так же, как и
со списками.
Создаем пустой кортеж:
Создаем кортеж из одного элемента
(использование оператора
запятая
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
КОРТЕЖИ. Работа с кортежами
ортеж можно создать и так:
Но все же не
увлекайтесь, и ставьте скобки, тем более, что бывают случаи, когда скобки н
обходимы.
оздать кортеж из итерируемого объекта можно
также
с помощью функции
tuple()
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
КОРТЕЖИ. Операции с кортежами
Допустимы в
операции над списками
, не изменяющие список (сложение, умножение на
число, методы
index()
count()
и некоторые другие операции).
Можно также по
разному менять элементы местами и так далее.
ордость программистов на
ython
возможность
поменять местами значения двух пер
мен
ных:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СЛОВАРИ
Словари в Python
неупорядоченные коллекции произвольных объектов с доступом по
ключу. Их иногда ещё называют
ассоциативными массивами
хеш
таблицами
Чтобы работать со словарём, его
нужно создать. Создать его можно несколькими способ
ми.
первых, с помощью литерала:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СЛОВАРИ
вторых, с помощью
функции
dict:
()()) &#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000; d &#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;{1: 1, 2: 4} &#x/MCI; 19;&#x 000;&#x/MCI; 19;&#x 000;В-третьих, с помощью метода fromkeys:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СЛОВАРИ
четвертых, с помощью генераторов словарей, которые очень похожи на
генераторы
списков
Добавление записей в словарь и
извлечение значений ключей:
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СЛОВАРИ
Как видно из примера, присвоение по новому ключу расширяет словарь, присвоение по с
ществующему ключу перезаписывает его, а попытка извлечения
несуществующего ключа
порождает исключение. Для избежания исключения есть специальный метод
. Также
можно
исключение
перехватывать
Что же можно еще делать со словарями?
о же самое, что и с другими объект
ми:
встроенные функции
ключевые слова
(например,
циклы
for
while
), а также специал
ные методы словарей.
СТРУКТУРЫ
ДАННЫХ
. КОЛЛЕКЦИИ.
СЛОВАРИ. Методы словарей
Методы словарей
dict.clear()
очищает словарь.
dict.copy()
возвращает копию словаря.
СТАНДАРТНАЯ БИБЛИОТЕКА
ВСТРОЕННЫЕ ФУНКЦИИ
ыполн
ение
преобразовани
типов
bool(x)
преобразование к типу
, использующая стандартную
процедуру
проверки истинности
. Если х
является ложным или опущен, возвращает значение
False
, в противном случае она возвращает
True
bytearray([источник [, кодировка [ошибки]]])
преобразование к
bytearray
.
Bytearray
изменяемая п
следовательность целых чисел в диапазоне
0≤X<256
. Вызванная без аргументов, возвращает пустой массив
байт.
bytes([источник [, кодировка [ошибки]]])
возвращает объект типа
bytes
, который является неизменяемой
последовательностью целых чисел в диапазоне
0≤X<256
. Аргументы конструктора интерпретируются как
для
bytearray()
complex([real[, imag]])
преобразование к
комплексному числу
dict([object])
преобразование к
словарю
float([X])
преобразование к
числу с плавающей точкой
. Если аргумент не указан, возвращается
0.0
frozenset([последовательность])
возвращает
неизменяемое множество
int([object], [основание системы счисления])
преобразование к
целому числу
list([object])
создает
список
memoryview([object])
создает объект memoryview.
ject()
возвращает безликий объект, являющийся базовым для всех объектов.
range([start=0], stop, [step=1])
арифметическая прогрессия от
start
до
stop
с шагом
step
set([object])
создает
множество
slice([start=0], stop, [step=1])
объект среза от
start
до
stop
с шагом
step
str([object], [кодировка], [ошибки])
строковое представление объ
екта. Использует метод
__str__
tuple(obj)
преобразование к
кортежу
СТАНДАРТНАЯ БИБЛИОТЕКА.
СТРОЕННЫЕ ФУНКЦИИ
Другие встроенные функции
abs(x)
Возвращает абсолютную величину (модуль числа).
all(последовательность)
Возвращает
True
, если все элементы истинные (или, если последовательность
пуста).
any(последовательность)
Возвращает
True
, если хотя бы один элемент
истина. Для пустой последов
тельности возвращает
False
ascii(object)
Как
repr()
, возвращает строку, содержащую представление объекта, но заменяет не
ASCII
символы на экранированные последовательности.
bin(x)
Преобразование целого числа в двоичную строку.
callable(x)
Возвращае
True
для объекта, поддерживающего вызов (как функции).
chr(x)
Возвращает односимвольную строку, код символа которой равен
СТАНДАРТНАЯ БИБЛИОТЕКА.
СТРОЕННЫЕ ФУНКЦИИ
exec(object[, globals[, locals]])
Выполняет программный код на
Python
filter(function, iterable)
Возвращает итератор из тех элементов, для которых
function
возвращает истину.
format(value[,format_spec])
Форматирование (обычно
орматирование строки
СТАНДАРТНАЯ БИБЛИОТЕКА.
СТРОЕННЫЕ ФУНКЦИИ
next(x)
Возвращает следующий элемент итератора.
oct(х)
Преобразование целого числа в восьмеричную строку.
open(file, mode='r', buffering=None,
encoding=None, errors=None, newline=None, closefd=True)
Открыв
ет файл и возвращает соответствующий поток.
ord(с)
Код символа.
pow(x, y[, r])
( x ** y ) % r.
reversed(object)
Итератор из развернутого объекта.
repr(obj)
Представление объекта.
prin
t([object, ...], *, sep=" ", end='
n', file=sys.stdout)
Печать.
СТАНДАРТНАЯ БИБЛИОТЕКА.
КЛЮЧЕВЫЕ СЛОВА
False
ложь.
True
правда.
None
"пустой" объект.
and
логическое И.
with / as
менеджер контекста
assert
условие
возбуждает исключение, если условие ложно.
break
выход из цикла.
class
пользовательский тип
, состоящий из методов и атрибутов.
continue
переход на следующую итерацию цикла.
def
определение
функции
del
удаление объекта.
elif
в противном случае, если.
else
см.
for/else
if/else
except
перехватить исключение.
СТАНДАРТНАЯ
БИБЛИОТЕКА.
КЛЮЧЕВЫЕ СЛОВА
finally
вкупе с инструкцией
try
, выполняет инструкции независимо от того, было ли и
ключение или нет.
for
цикл
for
from
импорт нескольких функций из модуля.
global
позволяет сделать значение переменной, присвоенное
ей внутри функции, досту
ным и за пределами этой функции.
if
если
import
импорт модуля.
in
проверка на вхождение.
is
ссылаются ли 2 объекта на одно и то же место в памяти.
lambda
определение анонимной функции.
nonlocal
позволяет сделать значение переменной, присвоенное ей внутри функции, до
тупным в объемлющей инструкции.
СТАНДАРТНАЯ БИБЛИОТЕКА.
КЛЮЧЕВЫЕ
СЛОВА
not
логическое НЕ.
логическое ИЛИ.
pass
ничего не делающая конструкция.
raise
возбудить исключение.
ИНСТРУКЦИИ ЯЗЫКА.
ИНСТРУКЦИИ ПРИСВАИВАНИЯ.
Ранее мы уже использовали инструкции присваивания для назначения имен объектам.
В канонической форме
цель
инструкции присваивания записывается слева от знака рав
ства
, а
, который присваивается,
справа.
ева может быть именем или компонентом объекта, а
объектом
справа может быть
произвольное выражение, которое в результате дает объект.
В большинстве случаев присваивание выполняется достаточно просто, однако оно обладает
следующими особенностями, которые с
ледует иметь в виду:
ИНСТРУКЦИИ ЯЗЫКА.
ИНСТРУКЦИИ ПРИСВАИВАНИЯ.
Инструкция присваивания создает ссылку на объект.
языке
Python
инструкция присваив
ния сохраняет ссылки на объекты в переменных или в элементах структур данных. Они всегда
создают ссылки на объекты и никогда не создают копии
объектов. Вследствие этого переменные
в языке
Python
больше напоминают указатели, чем области хранения данных.
Переменные создаются при первом присваивании.
Интерпретатор Python создает переменные,
когда им впервые присваиваются значения, благодаря этому
отсутствует необходимость предв
рительного объявления переменных. После выполнения операции присваивания всякий раз, когда
имя переменной будет встречено в выражении, оно замещается объектом, на который
она
ссыл
ется.
Прежде чем переменную можно будет исп
ользовать, ей должно быть присвоено значение.
Нельзя использовать переменную, которой еще не было присвоено значение. В этом случае и
терпретатор возбуждает исключение вместо того, чтобы вернуть какое
либо значение по умолч
нию.
Некоторые инструкции неявн
о тоже выполняют операцию присваивания.
языке
Python
присваивание может выполняться в самых разных контекстах. Например, импорт модуля, опр
деление функции или класса, указание переменной в цикле
и передача аргументов функции
неявно выполняют присваи
вание. Операция присваивания выполняется одинаково в любом ме
те, где бы она ни происходила, поэтому во всех этих контекстах просто выполняется связывание
имен со ссылками на объекты.
ИНСТРУКЦИИ ЯЗЫКА.
ФОРМЫ ИНСТРУ
КЦИ
ПРИСВАИВАНИЯ.
Операция
Интерпретация
Каноническая форма
Присваивание кортежей (позиционное)
Присваивание списков (позиционное)
Присваивание последовательностей, обобще
ное
Расширенная операция распаковывания последо
вате
льностей (Python 3.0)
Групповое присваивание одного значения
Комбинированная инструкция присваивания
(эквивалентно инструкции spams = spams + 42)


ИНСТРУКЦИИ ЯЗЫКА.
ФОРМЫ ИНСТРУКЦИИ ПРИСВАИВАНИЯ.
Каноническая форма
является наиболее распространенной: она свя
зывает переменную
(или элемент структуры данных) с единственным объектом.
Другие формы в таблице имеют особое назначение и являются необязательными, но многие
программисты находят очень
их
удобными:
Присваивание кортежей и списков
являются родственными.
Когда слева
от оператора
указывае
ся
кортеж
или
список
, интерпретатор связывает
объекты справа с именами слева, согласно их м
стоположениям, выполняя
присваивание слева направо. Например, во второй строке табл
с им
нем
spam
ассоциируется строка
‘yum’
а с именем
ham
ассоциируется строка
‘YUM’
. Внутри инте
претатор
Python
сначала создает элементы кортежа
справа, поэтому часто эта операция называется
распаковыванием кортежа
Присваивание последовательностей
это обобщение
операции присваивания кортежей
и списков
любая последовательность имен может быть связана
с любой последовательностью значений, и и
терпретатор свяжет элементы согласно их позициям. Фактически в последовательностях мы можем
смешивать разные типы. Инструкция присваивания в четвертой с
троке
табл
связывает кортеж
имен со строкой символов: имени
присваивается символ
‘s’
, имени
присваивается символ
так далее.
ИНСТРУКЦИИ ЯЗЫКА.
ФОРМЫ ИНСТРУКЦИИ ПРИСВАИВАНИЯ.
Расширенное распаковывание последовательностей
Python
3.0 появилась новая форма инс
рукции присваивания, позво
ляющая более гибко выбирать присваиваемые фрагменты последовател
ностей. В пятой строке табл
ицы
переменной
будет присвоен первый символ из строки справа, а п
ременной
оставшаяся часть строки, то
есть переменной
будет присвоено значение
, а пер
енной
значение
. В результате мы получаем простую альтернативу операции извлечения
срезов.
Групповое присваивание одного значения
Шестая строка табл
демонстрирует форму групп
вого присваивания. В этой форме интерпретатор присваивает ссылку на
один и тот же объект (самый
правый объект) всем целям, расположенным слева. Инструкция в таблице присвоит обоим именам
ссылку на один и тот же
объект, строку
‘lunch’
. Результат будет тот же, как если бы
были выполнены две инструкции:
, поскольку здесь
интерпретир
ется как оригинальный объект
строка (то есть не отдельная копия
этого объекта).
Комбинированное присваивание
Последняя строка
абл
это пример комбинированной инс
рукции
присваивания
краткая форма, кото
рая объединяет в себе выражение
и присваивание.
рукция
даст тот же результат,
что и инструкция
spam = spam + 42;
единственное
отличие состоит в том, что
комбинированная форма имеет более компактный вид и обычно выполн
ется быстрее.
сли объе
кт справа относится к категории изменяемых объектов и поддерживает ук
занную операцию, комбинированная
инструкция присваивания может выполняться даже быстрее, за
счет непосредственного изменения объекта вместо создания и изменения его копии.
Для каждого
ухместного оператора в языке Python
существует своя комбинированная инструкция присваивания.
ИНСТРУКЦИИ ЯЗЫКА.
ПРИСВАИВАНИ
Е ПОСЛЕДОВАТЕЛЬНОСТЕЙ
Рассмотрим примеры:
��� A, B = nudge, wink
# Присваивание кортежей
каноническим форма
>>> [C, D] = [nudge, wink] # Присваивание списков
В третьей инструкции в действительности присутствует два кортежа,
опу
щенными
охватывающи
круглы
ми
скобк
и. Интерпретатор Python сопоставляет значения элемен
тов кортежа
справа от оп
ратора присваивания с переменными в кортеже слева и выполняет присваивание значений в одной и
струкции.
Так как в процессе
выполнения инструкции интерпретатор создает временный кортеж, где с
храняются оригинальные значения перемен
ных справа, данная форма присваивания может и
пользоваться для реализации обмена значений переменных без
создания временной переменной
кортеж справа автоматически запоминает
предыдущие значения переменных
ИНСТРУКЦИИ ЯЗЫКА.
ПРИСВАИВАНИЕ ПОСЛЕДОВАТЕЛЬНОСТЕЙ.
ормы присваивания кортежей и списков были о
бобщены,
чтобы обеспечить возможность
указывать любые типы последовательностей
справа при условии, что они будут иметь ту же
длину.
Допускается присваивать кортеж значений списку переменных, строки символов
кортежу
переменных и так далее.
В любом случа
е интерпретатор свяжет элементы последовательности справа с переменн
ми в последовательности слева согласно их
позициям в направлении слева направо:
>>> [a, b, c] = (1, 2, 3) # Кортеж значений присваивается списку переменных
= “ABC” # Строка символов присваивается кортежу переменных
С технической точки зрения в правой части инструкции присваивания последовательностей
допускается указывать не только последовательности, но и любые объекты, обеспечива
щие воз
можность итераций по элементам.
ИНСТРУКЦИИ ЯЗЫКА.
ИСВАИВАНИЕ ПОСЛЕДОВАТЕЛЬНОСТЕЙ.
Даже при том, что допускается смешивать разные типы последовательностей
по обе стор
ны оператора =, обе последовательности должны иметь одно и то
же число элементов, в
противном случае мы получим сообщение об ошибке.
римеры:
ИНСТРУКЦИИ ЯЗЫКА.
ПРИСВАИВАНИЕ ПОСЛЕДОВАТЕЛЬНОСТЕЙ.
В общем случае нам необходимо получить срез. Существует несколько вариантов извлеч
ния среза, чтобы исправить дело:
ИНСТРУКЦИИ ЯЗЫКА.
РАСШИРЕННАЯ
ОПЕРАЦИЯ РАСПАКОВЫВАНИЯ

ТЕЛ
СТЕЙ.
Python
3.0 допускается использовать еще более обобщенную форму присваивания, пр
меняя
расширенный синтаксис распаковывания последовательностей
тобы описать более общий случай присваивания, слева от оператора присваивания допу
кается указ
ывать одно имя со
звездочкой, например
,
имени со звездочкой будет пр
своен список всех
элементов последовательности, не присвоенных другим переменным
слева. Это
особенно удобно для реализации таких распространенных операций, как разби
ние последовател
ьности на «начало» и «остаток».
ИНСТРУКЦИИ ЯЗЫКА.
РАСШИРЕННАЯ
ОПЕРАЦИЯ РАСПАКОВЫВАНИЯ

ТЕЛ
СТЕЙ.
Примеры:
��� seq = [1, 2, 3, 4]
��� a, b, c, d = seq
��� print(a, b, c, d)
ValueError: too many values to
ИНСТРУКЦИИ ЯЗЫКА.
РАСШИРЕННАЯ
ОПЕРАЦИЯ РАСПАКОВЫВАНИЯ

ТЕЛ
СТЕЙ.
��� a, *b = ‘spam’
(‘s’, [‘p’, ‘a’, ‘m’])
��� a, *b, c = ‘spam’
(‘s’, [‘p’, ‘a’], ‘m’)
:] # Тип среза зависит от типа исходной последовательности,
(‘s’, ‘pam’) # расширенная операция распаковывания всегда возвращает список
��� S[0], S[1:3], S[3]
(‘s’, ‘pa’, ‘m’)
ИНСТРУКЦИИ ЯЗЫКА.
РАСШИРЕННАЯ
ОПЕРАЦИЯ РАСПАКОВЫВАНИЯ
ТЕЛ
СТЕЙ.
НИЧНЫЕ СЛУЧАИ.
Расширенная операция распаковывания последовательностей обладает достаточной гибк
стью, тем не менее, следует отметить некоторые граничные
случаи.
первых, пер
менной со звездочкой может соответствовать един
ственный элемент, но ей
всегда присва
вается список:
&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000;&#x/MCI; 17;&#x 000; a, b, c, *d = seq
��� print(a, b, c,
&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;Во-вторых, если на долю переменной со звездочкой не остается неприсвоенных
элементов,
ей присваивается пустой список, независимо от
пози
ции
, где
эта переменная нах
дится.
a, b, c, d, *e = seq
��� print(a, b, c, d,
&#x/MCI; 24;&#x 000;&#x/MCI; 24;&#x 000;&#x/MCI; 24;&#x 000;&#x/MCI; 24;&#x 000;&#x/MCI; 24;&#x 000; a, b, *e, c, d = seq
��� print(a, b, c, d,
ИНСТРУКЦИИ ЯЗЫКА.
РАСШИРЕННАЯ
ОПЕРАЦИЯ РАСПАКОВЫВАНИЯ
ТЕЛ
СТЕЙ.
НИЧНЫЕ СЛУЧАИ.
Наконец,
ошибкой будет считаться, если указать несколько переменных со
звездочк
; если
значений окажется недостаточно, а слева не окажется пере
менной со звездочкой
и если п
ременная со звездочкой окажется
единственной вне последовательности:
��� a, *b, c, *d = seq
SyntaxError: two starred expressions in assignment
ValueError: too many values to unpack
ИНСТРУКЦИИ ЯЗЫКА.
РАСШИРЕННАЯ
ОПЕРАЦИЯ РАСПАКОВЫВАНИЯ
ТЕЛ
СТЕЙ.
ПОЛЕЗНОЕ УДОБСТВО
асширенная операция распаковывания последовательно
стей
это всего лишь удобство.
ого же эффекта
мож
добиться
, исполь
зуя явно операции индексир
вания и извлеч
ния
среза
, но расш
ренная инструкция
распаковывания выглядит компактнее.
&#x/MCI; 15;&#x 000;&#x/MCI; 15;&#x 000;&#x/MCI; 15;&#x 000;&#x/MCI; 15;&#x 000;&#x/MCI; 15;&#x 000; a, *b = seq #
) &#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000; a, b = seq[0], seq[1:] #
) &#x/MCI; 21;&#x 000;&#x/MCI; 21;&#x 000; &#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000;&#x/MCI; 22;&#x 000; *a, b = seq # "Остаток, последний
) &#x/MCI; 25;&#x 000;&#x/MCI; 25;&#x 000;&#x/MCI; 25;&#x 000;&#x/MCI; 25;&#x 000;&#x/MCI; 25;&#x 000; a, b = seq[:
-1] # "Остаток, последний
ИНСТРУКЦИИ ЯЗЫКА.
РАСШИРЕННАЯ
ОПЕРАЦИЯ РАСПАКОВЫВАНИЯ
ТЕЛ
СТЕЙ.
СПОЛЬЗОВАНИЕ В ЦИКЛАХ
FOR
Так
переменные цикла в инструкции
for
также участвуют в присваи
вании, расш
ренная
рация распаковывани
я последовательностей может
применяться и к ним.
Python
3.0 рас
ширенная инструкция распаковывания может пом
щаться после слова for,
где
обы
но указывается простое имя переменной:
, c) in [(1, 2, 3, 4), (5, 6, 7, 8)]:
При таком использовании в каждой итерации интерпретатор будет просто при
сваивать оч
дной кортеж значений
кортежу переменных.
На первом прохо
де, н
мер, б
дет в
нено присваивание, как если бы оно было реал
зова
но в виде выраж
ния:
a, *b, c = (1, 2, 3, 4) # Переменная b получит значение [2, 3]
ого же э
фекта можно добиться с помощью простой опер
ции присваивания кортежей
for (a, b, c) in [(1, 2, 3), (4, 5, 6)]: # a, b, c = (1, 2, 3), ...
Или
применив о
перацию извлечения
среза:
for all in [(1, 2, 3, 4), (5, 6, 7, 8)]:
a, b, c = all[0], all[1:3], all[3]
ИНСТРУКЦИИ ЯЗЫКА.
ГРУППОВОЕ
ПРИСВАИВАНИЕ
При групповом присваивании
объект, расположенный справа, присваивается
всем указа
ным переменным. В следующем примере трем переменным
,
присваивается строка
��� a = b = c = ‘spam’
(‘spam’, ‘spam’, ‘spam’)
Эта инструкция эквивалентна (но записывается компа
ктнее) следующим трем
инструкциям
присваивания:
(‘spam’, ‘spam’, ‘spam’)
ИНСТРУКЦИИ ЯЗЫКА.
ГРУППОВОЕ ПРИВАИВАНИЕ
РУППОВОЕ ПРИСВАИВАНИЕ И РАЗДЕЛЯЕМЫЕ ССЫ
При
гупповом присваивании
существует всего один объект, разделяемый
всеми тремя п
ми (все они ук
ют на один и тот же объект в памя
ти). Такой способ присва
вания хорошо подходит для неизменяемых объектов,
например
для инициализации н
скол
ких счетчиков нулевым значением
зме
нение переменной
затронет только переменную
, потому что числа
не допу
кают
возможность непосредственного изменения. Если присваивае
мый объект является н
изм
няемым, совершенно не важно, как много ссылок
на него будет создано.
ИНСТРУКЦИИ ЯЗЫКА.
ГРУППОВОЕ ПРИВАИВАНИЕ
РУППОВОЕ ПРИСВАИВАНИЕ И РАЗДЕЛЯЕМЫЕ ССЫ
Однако
следует
проявлять осторожность, выполняя присваивание
переменным и
меняемых
ектов, таких как списки или словари:
&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000;&#x/MCI; 20;&#x 000; b.append(42)
) &#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000;На этот раз, поскольку
ссылаются на один и тот же объект, непосредствен
ное доба
ние
значения к объекту через переменную
будет воздействовать
и на переменную
Чтобы избежать этой проблемы, инициализацию изменя
емыми объектами
следует произв
дить в отдельных инструкциях, чтобы в каждой из них созда
вался новый пустой объект с
помощью отдельных литеральных выражений:
&#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000; b = [] &#x/MCI; 27;&#x 000;&#x/MCI; 27;&#x 000;&#x/MCI; 27;&#x 000;&#x/MCI; 27;&#x 000;&#x/MCI; 27;&#x 000; b.append(42)
ИНСТРУКЦИИ ЯЗЫКА.
ОМБИНИРОВАННЫЕ ИНСТРУКЦИИ ПРИСВАИВАНИЯ
Начиная с
версии
Python
2.0
, в языке появился набор дополн
тельных ин
струкций пр
сва
вания
. Известные как
комби
нированные инструкции пр
вания
и заимствова
ные из языка C, они по
существу являются лишь более компактной формой записи. Они
комб
нируют
в себе выражение и операцию присваивания. Например, следующие две фо
мы з
писи практиче
ски эквивалентны:
X = X + Y # Традиционная форма записи
X += Y # Новая, комбинированная форма записи

ИНСТРУКЦИИ ЯЗЫКА.
ОМБИНИРОВАННЫЕ ИНСТРУКЦИИ ПРИСВАИВАНИЯ
Комбинированные операции присваивания существуют для любого поддержи
ваемого
двухместного оператора.
Если комбинированную инструкцию применить к строкам, будет выполнена
операция ко
катенации. Таким образом, вторая строка ниже эквивалентна бо
лее длинной инструкции
��� S += “SPAM” #
ИНСТРУКЦИИ ЯЗЫКА.
ОМБИНИРОВАННЫЕ ИНСТРУКЦИИ ПРИСВАИВАНИЯ
Комбинир
ованные инструкции присваивания обладают следующими преимуществами:
Уменьшается объем ввода с клавиатуры.
Левая часть инструкции должна быть получена всего один раз. В инструк
может оказаться сложным выражен
ием, которое в комбини
рованной форме дол
но
быть вычислено всего один раз. В более длинной
форме записи
поя
ся
дважды, и поэтому данное выражение
должно быть вычислено дважды. Всле
вие
этого комбинированные ин
струкции присваивания в
ыполняются обычно быстрее.
Автоматически выбирается оптимальный алгоритм выполнения. Для объ
ектов, подде
живающих возможность непосредственного изменения, ком
бинированные инструкции
присваивания автоматически выполняются
непосредственно на самих объ
ектах, вместо
выполнения более медленной
операции копирования.
ИНСТРУКЦИИ ЯЗЫКА.
ОМБИНИРОВАННЫЕ ИНСТРУКЦИИ ПРИСВАИВАНИЯ
И последний момент, который требует дополнительных разъяснений.
Комби
нирова
ные инструкции присваивания, при применении к изменяемым объ
там, м
гут служить для о
тимизации.
Вспомним, что списки могут расши
ряться разными способ
ми. Чтобы добавить в список
единственный элемент,
мы можем выполнить операцию ко
катенации или вызвать метод
append
&#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;>>> L = L + [3] # Конкатенация
: более медленная
&#x/MCI; 21;&#x 000;&#x/MCI; 21;&#x 000;>>> L.append(4) # Более быстрая, но изменяет сам объект
&#x/MCI; 24;&#x 000;&#x/MCI; 24;&#x 000;А чтобы добавить несколько элементов, мы можем либо снова выполнить опе
рацию конк
тенации, либо вызвать метод
extend2
>>> L = L + [5, 6] # Конка
тенация: более медленная
[1, 2, 3, 4, 5, 6]
>>> L.extend([7, 8]) # Более быстрая, но изменяет сам объект
[1, 2, 3, 4, 5, 6, 7, 8]
ИНСТРУКЦИИ ЯЗЫКА.
ОМБИНИРОВАННЫЕ ИНСТРУКЦИИ ПРИСВАИВАНИЯ
В обоих случаях операция конкатенации несет в себе меньше побочных эффек
тов при раб
те с разделяемыми ссылками н
а объекты, но вообще она выполня
ется медленнее, чем экв
валентные операции, воздействующие на объект не
посредственно. Операция конкатенации
должна создать новый объект, копию
списка слева, и затем скопировать в него список спр
ва. В противовес ей метод
воздействующий на объект непосредственно, просто добавляет
новый элемент
в конец блока памяти.
При использовании комбинированной инструкции присваивания для расши
рения списка мы
можем не думать об этих деталях
интерпретатор
Python
оматически вызовет более б
стрый метод
extend
вместо использования более
медленной операции конкатенации, кот
рую предполагает оператор
>>> L += [9, 10] # Выполняется как L.extend([9, 10])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ИНСТРУКЦИИ ЯЗЫКА.
ОМБИНИРОВАННЫЕ ИНСТРУКЦИИ ПРИСВАИВАНИЯ
РАЗДЕЛЯЕМЫЕ ССЫ
Такой порядок вещей чаще всего именно то, что нам требуется, но необходимо
учитывать
он предполагает, что применительно к спискам операция
полняет изменения неп
средственно в объекте, а это далеко не то же самое, что
операция конкатенации
, в рез
тате которой всегда создается новый объ
ект.
Как всегда в случае использования разделя
мых ссылок, различия в по
ведении этих опер
ций могут иметь значение, если имеются др
гие ссылки на
изменяемый объект:
&#x/MCI; 18;&#x 000;&#x/MCI; 18;&#x 000;>>> M = L # L и M ссылаются на
один и тот же объект
>>> L = L + [3, 4] # Операция конкатенации создает новый объект
>>> L, M # Изменяется L, но не M
([1, 2, 3, 4], [1, 2])
&#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000;&#x/MCI; 23;&#x 000; M = L &#x/MCI; 24;&#x 000;&#x/MCI; 24;&#x 000;>>> L += [3, 4] # Операция += предполагает вызов метода extend
>>> L, M # Значение M тоже
([1, 2, 3, 4], [1, 2, 3, 4])
Все это имеет значение только для изменяемых объектов, таких как списки
и словари
Если
требует
ся избе
жать создания системы разделяемых ссылок, создавайте копии и
мых
объектов.
ИНСТРУКЦИИ ЯЗЫКА.
ИНСТРУКЦИИ
ВЫРАЖЕНИЙ.
ИНСТРУКЦИИ ЯЗЫКА.
ИНСТРУКЦИИ
ВЫРАЖЕНИЙ.
еречисл
некоторые наиболее часто используемые в языке
Python
формы инструкций
выражений. При вызове функций и методов им
передаются ноль или более объектов в виде
аргументов
в круглых
скобках, следующих за именем функции или метода.
Опер
ция
нтерпрет
ция
Последние две строки в таблице представляют специальные случаи
. Наприм
ер,
инстру
ция
да в версии Python 3.0 была
преобразована в функцию, вызов которой обычно офор
ется в в
де отдель
ной строки
ействительности оба слу
чая являются всего лишь пр
рами и
ций выражений.
ИНСТРУКЦИИ ЯЗЫКА.
ИНСТРУКЦИИ
ВЫРАЖЕНИЙ.
Например, даже при том, что функция print вызывается в отдельно
й строке,
как инструкция
выражения, тем не менее она возвращает значение, как и лю
бая другая функция (она во
вращает значение None
оно возвращается всеми
функциями, которые явно не возвращают
какого
либо значимого значения):
Несмотря на то, что выражения могут играть роль инструкций в языке Python,
сами инс
рукции не могут использоваться в качестве выражен
ий.
Например,
язык Python не допускает встраивание инструкции присваивания (=) в выра
жения. Сделано это специально, чтобы помочь избежать ошибок,
вы могли
бы случайно изменить переменную, введя вместо оператора проверки равен
ства == опер
тор присваив
ания =.
Инструкции выражений являются причиной распростра
ненной ошибки при
программир
нии на языке Python. Инструкции выражений часто исполь
зуются для вызова методов
списка, которые непосредственно изменяют сам
список:
&#x/MCI; 6 ;&#x/MCI; 6 ;>>> L.append(3) # Метод append изменяет сам список &#x/MCI; 7 ;&#x/MCI; 7 ;&#x/MCI; 7 ;&#x/MCI; 7 ;&#x/MCI; 7 ; L &#x/MCI; 8 ;&#x/MCI; 8 ;[1, 2, 3] &#x/MCI; 9 ;&#x/MCI; 9 ; &#x/MCI; 10;&#x 000;&#x/MCI; 10;&#x 000;Однако начинающие программисты нередко записывают такие операции
в виде инструкций
присваивания, пытаясь связать имя
со списком:
Така
я операция дает неверный результат
такие методы списка, как
apend
sort
reverse
гда выполняют непосредственное изменение объекта, но они
не возвращают список, к
торый был изменен с их помощью
. В действительно
сти они возвращают объект
None
. Если
результат такой операции прис
оить той
же переменной, вы потеряете список (скорее всего,
он будет уничтожен в ходе
процесса сборки мусора!).
ИНСТРУКЦИИ ЯЗЫКА.
ИНСТРУКЦИИ
РАЖЕНИЙ
НСТРУКЦИИ ВЫРАЖЕНИЙ И НЕПОСРЕДСТВЕННОЕ
ИЗМЕНЕНИЕ
ОБЪЕКТОВ
ИНСТРУКЦИИ ЯЗЫКА.
УСЛОВНЫЙ ОПЕРАТОР
ELIF
ELSE
НСТРУКЦИЯ IF
ELIF
ELSE
Условная инструкция if
elif
else
(её ещё иногда называют оператором ветвления)
осно
ной инструмент выбора в
Python
. Проще говоря, она выбирает, какое действие следует в
полнить, в зависимости
от значения переменных в момент проверки условия.
Синтаксис инструкции if
Сначала записывается часть
с условным выражением, далее могут следовать одна или
более необязательных частей
, и, наконец, необязательная часть
. Общая форма
записи условн
ой инструкции
выглядит следующим образом:
ИНСТРУКЦИИ ЯЗЫКА.
УСЛОВНЫЙ ОПЕРАТОР
ELIF
ELSE
Простой пример
(напечатает 'true', так как 1
истина):
Чуть более сложный пример
(его результат будет зависеть от того, что ввёл пользователь):
Конструкция с
несколькими elif может также служить отличной заменой конструкции switch
case в
других языках программирования.
ИНСТРУКЦИИ ЯЗЫКА.
ПРОВЕРКА ИСТИННОСТИ
Любое число, не равное 0, или непустой объект
истина.
Числа, равные 0, пустые объекты и
значение None
ложь
Операции сравнения применяются к структурам данных рекурсивно
Операции сравнения возвращают True или False
Логические операторы and и or возвращают истинный или ложный объект
операнд
Логические операторы:
Истина, если оба значе
ния X и Y истинны.
Истина, если хотя бы одно из значений X или Y истинно.
Истина, если X ложно.
ИНСТРУКЦИИ ЯЗЫКА.
ТРЁХМЕСТНОЕ ВЫРАЖЕНИЕ
IF/ELSE
Следующая инструкция:
довольно короткая, но, тем не менее,
занимает целых 4 строки. Специально для таких сл
чаев и было придумано выражение
нтерпретатор выполнит выражение Y, если X истинно,
иначе
выполнится выражение Z.
ИНСТРУКЦИИ ЯЗЫКА.
ЦИКЛЫ
WHILE
Цикл while
hile
один из самых универсальных циклов в
Python
, поэтому довольно медленный. В
полняет тело цикла до тех пор, пока условие цикла истинно.
Общий вид цикла:
При этом выражением может быть как
одна
так и несколько инструкций. Условием может
быть любое истинное или ненулевое значение. Выражение будет повторяться, пока условие
будет истинным.
Когда условие становится ложным
интерпретатор переводит выполнение программы на
строку, следующую за цик
лом.
ИНСТРУКЦИИ ЯЗЫКА.
ЦИКЛЫ.
WHILE
Примеры:
ИНСТРУКЦИИ ЯЗЫКА.
БЕСКОНЕЧНЫЕ ЦИКЛЫ
Бесконечный цикл:
Цикл while
становится
бесконечным
в случае, когда условие цикла никогда не становится
ложным. Примером задачи для реализации которой необходим
бесконечный цикл
может
быть, например, создание программы "Часы", которая бесконечно будет обновлять и от
бражать время. Однако, часто бесконечный
цикл является ошибкой начинающего програ
миста, который забыл добавить изменение условия цикла. Например:
При
запуск
данн
ого
цикл
программа начнет бесконечное выполнение. Чтобы остановить
выполнение
такого скрипта
в shell нужно нажать
Ctrl+C
ИНСТРУКЦИИ ЯЗЫКА.
ЦИКЛЫ.
FOR
Цикл for
Цикл
for
уже чуточку сложнее, чуть менее универсальный, но выполняется гораздо быстрее
цикла
while
. Этот цикл проходится по любому итерируемому объекту
,
перебера
элементы
любого комплексного типа данных
(например строке или списку), и во время каждого пр
хода выполняет тело цикла.
Общий вид:
Здесь
еременной
присваивается значение первого элемента
из
объекта
, после чего
выполняется
блок 1
. Затем
переменной
присваивается следующее по порядку значение
и так далее до тех пор, пока не будут перебраны все элементы
объекта
переменная
не будет найдена и выполнится
блок 2
ИНСТРУКЦИИ ЯЗЫКА.
ЦИКЛЫ.
FOR
Пример:
ИНСТРУКЦИИ ЯЗЫКА.
ЦИКЛЫ.
FOR
. Перебор комплексных типов данных по
индексам
Другой способ прохода циклом
for
по комплексным типам данных является проход по
индексам. Как вы помните,
любой элемент последовательности можно получить по его и
дексу. Для генерации списка индексов воспользуемся
встроенной функцией
range()
Например:
&#x/MCI; 24;&#x 000;&#x/MCI; 24;&#x 000;for index in range(len(week_days)): &#x/MCI; 25;&#x 000;&#x/MCI; 25;&#x 000;print week_day[index] &#x/MCI; 26;&#x 000;&#x/MCI; 26;&#x 000; В результате программа напечатает перечень дней недели.
ИНСТРУКЦИИ ЯЗЫКА.
УНКЦИЯ
range()
Вообще говоря,
range()
является универсальной
функцией
Python
для создания
списков
содержащих арифметическую прогрессию. Чаще всего она используется в
циклах
for
.
Функция
range()
может принимать от одного до трех агрументов, при этом аргументами
должны быть
целые числа (int).
range(старт,
стоп,
шаг)
так выглядит стандартный вызов
функции
range()
Python
По умолчанию
старт
равняется нулю,
шаг
единице.
Возвращает список целых чисел в
форме
[старт, старт + шаг, старт + шаг*2...]
. Если
шаг
положительное
число, последним элементом списка будет
наибо
льшее
старт + i*шаг
меньшее чи
стоп
. Если
шаг
отрицательное число, то последний элемент будет
наименьшее
старт
+ i * шаг
большее числа
стоп
Шаг
не должен равняться нулю, иначе возникнет
оши
ValueError
ИНСТРУКЦИИ ЯЗЫКА.
УНКЦИЯ
range()
Примеры использований функции
range()
Python
ИНСТРУКЦИИ ЯЗЫКА.
УНКЦИЯ
xrange()
Функция
xrange()
Python
очень похожа на функцию
range()
за тем лишь исключением, что
вместо списка создаетобъект
xrange
. Производит те же элементы, что и
range()
, но не сохраняет их.
Преимущества использования
xrange()
вместо
range()
заметны лишь при при работе с огромным к
личеством элементов или в ситуации, когда сами по себе созданные элементы нами не используются,
нам не нужно изменять их или порядок в котором они расположены.
Например, вот такая команда приведет к ошибке
MemoryEr
ror
В то время, как
xrange()
создаст нужный объект.
Python
версии 3.х функция
range()
ведет себя как
xrang
e()
во второй версии питона, а фун
xrange()
убрана вовсе.
ИНСТРУКЦИИ ЯЗЫКА.
МНОЖЕСТВЕННОЕ ПРИСВАИВАНИЕ
Python
можно за одну инструкцию присваивания изменять значение сразу нескольких
переменных. Делается это так:
Этот код можно
записать и так:
Отличие двух способов состоит в том, что множественное присваивание в первом способе
меняет значение двух переменных одновременно.
Если слева от знака «=» в множественном присваивании должны стоять через запятую им
на переменных
, то справа могут стоять произвольные выражения, разделённые запятыми.
Главное, чтобы слева и справа от знака присваивания было одинаковое число элементов.
ИНСТРУКЦИИ ЯЗЫКА.
МНОЖЕСТВЕННОЕ ПРИСВАИВАНИЕ
Множественное присваивание удобно
использовать, когда нужно обменять значения двух
переменных. В обычных языках программирования без использования специальных фун
ций это делается так:
Python
то же действие записывается в одну строчку:
ИНСТРУКЦИИ ЯЗЫКА.
ОПЕРАТОРЫ
BREAK
CONTINUE
Оператор continue
Оператор
continue
начинает следующий
проход цикла, минуя оставшееся тело цикла
for
while
Оператор break
Оператор
break
досрочно прерывает цикл.
ИНСТРУКЦИИ ЯЗЫКА.
ВОЛШЕБНОЕ СЛОВО
ELSE
Слово
else
, примененное в цикле
for
while
, проверяет, был ли произведен выход из
цикла инструкцией
break
, или же "естественным" образом. Блок инструкций внутри
else
выполнится только в том случае, если выход из цикла произошел без помощи
break
ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
ФУНКЦИИ.
Именные функции, инструкция def
Функция в
ython
объект, принимающий аргументы и возвращающий значение. Обычно функция
определяется с помощью инструкции
def
Определим простейшую функцию:
ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
ФУНКЦИИ.
Именные функции, инструкция def
Функция может быть любой сложности и возвращать любые объекты (списки, кортежи, и даже фун
ции!):
ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
ФУНКЦИИ. Аргументы
функции
Функция может
принимать произвольное количество аргументов или не принимать их вовсе. Также
распространены функции с произвольным числом аргументов, функции с позиционными и именова
ными аргументами, обязательными и необязательными.
ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
ФУНКЦИИ. Аргументы
функции
Функция также может принимать переменное количество позиционных аргументов, тогда перед
нем ставится *:
ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
ФУНКЦИИ. Аргументы
функции
Функция может
принимать и произвольное число именованных аргументов, тогда перед именем ст
вится **:
ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
ФУНКЦИИ. Анонимны
функции
. Инструкция
lambda
Анонимные функции могут содержать лишь одно выражение, но и выполняются они быстрее. Ан
нимные функции создаются с помощью инструкции
lambda
. Кроме этого, их не обязательно присва
вать переменной, как делали мы инструкцией
def func()
lambda
функции, в отличие от обычной, не требуется инстру
кция

Приложенные файлы

  • pdf 1080461
    Размер файла: 7 MB Загрузок: 0

Добавить комментарий