Данная статья представляет собой очень краткую, но емкую выжимку всего, что должен знать начинающий разработчик или QA-инженер о языке Python. Надеюсь, что усердие, приложенное при написании данной статьи, поможет многим подготовиться к собеседованиям на соответствующие вакансии и расширить свой IT-кругозор.
Статью стоит воспринимать не как учебник, а как удобную шпаргалку или «опорный сигнал» (так моя учительница истории называла подобное «творчество» в школе). Здесь не будет подробных определений, объяснений в целую главу, а лишь четкие термины, списки, краткие выжимки кода. Статья основана на замечательной книге Марка Лутца «Изучаем Python (5-е издание)», так что за её корректность и достоверность можете не переживать. Итак, начнем.
Вкратце о Python
Python — высокоуровневый язык программирования общего назначения (часто называется языком сценариев), ориентированный на повышение производительности разработчика и читаемости кода.
Преимущества Python:
- Качество ПО
- Высокая скорость разработки
- Переносимость программ
- Библиотеки поддержки
- Интеграция компонентов (можно вызывать функции из библиотек C/C++)
Основные возможности Python:
- Динамическая типизация (при этом она строгая)
- Автоматическое управление памятью
- Модульное программирование
- Встроенные типы объектов
- Библиотеки утилит
Процесс запуска программ:
- Сценарий компилируется (перевод программы) в байт-код (платформонезависимое представление исходного текста программы, .pyc файл)
- Байт-код передается виртуальной машине PVM.
Сравнение с C/C++:
- Отсутствует этап сборки
- Байт код не является двоичным машинным кодом (не может выполняться так же быстро)
Альтернативные реализации Python:
- CPython (реализация на ANSI C)
- Jython (реализация на Java классах)
- IronPython (реализация для использования с .Net)
Типы объектов в Python
Данные в Python представляется в форме объектов — либо встроенных, либо создаваемых с помощью конструкций языка Python или других (например С).
Программы <= Модули <= Инструкции <=Выражения
Формы отображения объектов:
- repr (в виде программного кода, например 6.28300000000004)
- str (более читаемый, например 6.283)
Строка — неизменяемая последовательность (упорядоченная коллекция) других объектов (односимвольных строк) в языке Python.
Некоторые операции над последовательностями:
- len(s) — длина
- s[0] — обращение к элементу
- s[-1] — обращение к элементу с конца последовательности
- s[1:3] — срез начиная со смещения 1 и до 2 (не 3)
- s[:] — скопировать все содержимое (не путать с a=s)
- s*8 — повторение
- s+’xyz’ — конкатенация
Особые символы табуляции:
- \n — конец строки
- \t — табуляция
- ord(‘\n’) — байт с числовым значением
- ‘A\0B\0C’ — \0 двоичный ноль
[Hint] Чтобы вывести все доступные методы у переменной: dir(s)
Списки (lists) – это упорядоченные по местоположению коллекции объектов произвольных типов, размер которых не ограничен.
Списки являются последовательностями => поддерживают все операции над последовательностями. Единственное отличие состоит в том, что результатом таких операций являются списки, а не строки.
Преимущества списков:
- Возможность создавать вложенные списки
- Использование выражений генераторов списков
col2 = [row[1] for row in M]
Словари (dictionary) — не являются последовательностями, это коллекции объектов, где доступ к ним осуществляется не по определенным смещениям от начала коллекции, а по ключам. Изменяемый тип. Также возможна вложенность.
D = {'food': 'Spam', 'quantity': 4, 'color': 'pink'}
илиD = {}
D['name'] = 'Bob'
Кортеж (tuple) — список, который невозможно изменить. Кортежи являются последовательностями, как списки, но они являются неизменяемыми, как строки. Возможна вложенность. Возможно одновременное хранение объектов разных типов.
T = (1, 2, 3, 4)
Объекты-файлы — это основной интерфейс между программным кодом на языке Python и внешними файлами на компьютере. Файлы являются одним из базовых типов, но они представляют собой нечто необычное, поскольку для файлов отсутствует возможность создания объектов в виде литералов. Вместо этого, чтобы создать объект файла, необходимо вызвать встроенную функцию open, передав ей имя внешнего файла и строку режима доступа к файлу.
f = open('data.txt', 'w') # Создается новый файл для вывода
Самый лучший на сегодняшний день способ чтения файлов состоит в том, чтобы не читать его содержимое целиком – файлы предоставляют итераторы, которые обеспечивают автоматическое построчное чтение содержимого файла в циклах for и в других контекстах.
Множества — это неупорядоченные коллекции уникальных и неизменяемых объектов. Множества создаются встроенной функцией set.
X = set('spam') # В 2.6 и 3.0 можно создавать из последовательностей
Y = {'h', 'a', 'm'} # В 3.0 можно определять литералы множеств
X, Y
({'a', 'p', 's', 'm'}, {'a', 'h', 'm'})
X & Y # Пересечение
{'a', 'm'}
X | Y # Объединение
{'a', 'p', 's', 'h', 'm'}
X – Y # Разность
{'p', 's'}
Комментарии (34)
gorbln
14.10.2016 15:24+12Ну, как бы, шпаргалка предполагает краткость, не?
Простыни на 900 КБ(прошу прощения за «простыни», но PDF сюда не вкорячивается)
shifttstas
02.02.2017 11:44У них есть модули которые работают без нуля и без батареек, но я не стал с ними заморачиватся, батарейки должно хватить на год уж точно.
KonstantinSoloviov
14.10.2016 17:13+2Спасибо. Вы спасли тему автора. Хорошо, что можно добавить в закладки комментарий.
gorbln
14.10.2016 20:25+1Думаю, надо упомянуть, что это не мой перевод. Автор — Laurent Pointal, а перевёл — Федотов В.А.
А вот где я нашёл эту ПДФку — я, к сожалению, не вспомню.
Но на добром слове — спасибо.
romangoward
14.10.2016 16:05-3Преимущества Python:
оО вот прям так и скорость, и качество, и переносимость? И минусов нет совсем?
- Качество ПО
- Высокая скорость разработки
- Переносимость программ
- Библиотеки поддержки
- Интеграция компонентов (можно вызывать функции из библиотек C/C++)
Альтернативные реализации Python
Не альтернативные реализации (альтернативы чему?), а варианты имплементации на разных платформах.
Строка — неизменяемая последовательность (упорядоченная коллекция) других объектов (односимвольных строк) в языке Python.
Можно подумать, что строки в python нельзя модицифировать. Нельзя изменить объект строки, поэтому при присвоении меняется не содержимое объекта, а указатель преносится на новый объект, а сами строки — абстракции, с которыми работает разработчик, —изменять можно.
>>> a = 'test' >>> id(a) 140097800387872 >>> a = a + 'lol' >>> id(a) 140097800388016
DuDDiTs
14.10.2016 16:28+4Мне кажется вы немного придираетесь придираетесь.
Строки ведь действительно неизменяемы. Создать новый объект на основе существующего, это совсем не изменение строки.
Ну и преимущества вполне себе адекватные, разве что качество ПО едва ли зависит от языка.romangoward
15.10.2016 01:05-1Мне кажется вы немного придираетесь придираетесь.
Да :-}
Строки ведь действительно неизменяемы. Создать новый объект на основе существующего, это совсем не изменение строки.
Я всего лишь обратил внимание на формулировку.
Bausk
19.10.2016 17:05Строго говоря, в Питоне строку можно изменить через ctypes.cdll(...).memset прямо в памяти.
Но не как объект, конечно.
saluev
14.10.2016 19:18+1Изменять строки скорее нельзя, чем можно:
>>> a = "abc" >>> a[2] = "q" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment
Alcor
19.10.2016 17:05Согласен — спорное утверждение:
>>> a = "test" >>> id(a) 139853355896192 >>> a.replace("t","b") 'besb' >>> id(a) 139853355896192
romangoward
19.10.2016 17:31Это и есть классический пример immutable, когда метод объекта не изменяет сам объект, а генерирует новый.
В вашем примере, если сделать print(a), то вернётся исходное значение. А что бы исходное значение по указателю 'a' изменилось, надо сделать a = a.replace("t","b"), тогда и id объекта будет другим.
kvothe
14.10.2016 18:18Множества — это неупорядоченные коллекции уникальных и неизменяемых объектов. Множества создаются встроенной функцией set.
Простите, но я вас немножечко поправлю. set — изменяемое множество, неизменяемое это frozenset.
Ссылка на документациюDjaler
19.10.2016 17:05А тут и не сказано, что set неизменяемы. Говорится о том, что они содержат в себе неизменяемые элементы.
DaneSoul
19.10.2016 17:06Сами объекты в множестве должны быть hashable, что не выполняется для мутабельных объектов и требуется для проверки их уникальности в коллекции. Такое же требование к ключам словаря.
А вот набор объектов в set действительно изменяем.
KonstantinSoloviov
14.10.2016 21:43+2Качество ПО
Инвариантно языку програмированияSpiritschaser
19.10.2016 17:06Допустим, вам нужно написать ОЧЕНЬ много кода, допустим, или на C, или на java.
Вероятность забыть про buffer overfow или ещё какие кускиданных в памяти на C несоизмеримо выше, чем на явах да питонах.
roller
17.10.2016 03:29Лучше бы ссылку на перевод книги выложили https://github.com/borisuvarov/python-cookbook-ru
DiSha
19.10.2016 17:06+1Спасибо за краткость и полезность, жду продолжения.
Еще одна шпаргалка
Заголовок спойлераTiberiumk
19.10.2016 17:06Вы забыли упомянуть PyPy — реализация Python на RPython (Restricted Python — полностью совместимый с Python язык, использующий меньше «динамичности» самого Python — и код на RPython может исполняться как обычный Python код). Самая главная возможность PyPy — JIT компилятор
artdavydau
19.10.2016 17:06Альтернативные реализации Python:
CPython (реализация на ANSI C)
Если CPython это альтернативная реализация, то какая же тогда этолонная?
Vokanim13
19.10.2016 17:06Подскажите пожалуйста, вопрос может дурацкий но все же, как при делении меньшего числа на большее получить не 0. То есть делении 1 на 2 получить 0,5 а не 0, который выдает Python при компилировании
Tiberiumk
19.10.2016 17:12Python — интерпретируемый :)
Насчёт вопроса — вы скорее всего пользуетесь Python 2, там, чтобы получить не целую часть, нужно, чтобы число, участвующее в делении, было float, т.е:
1.0/2
В Python 3 это не требуется, там можно просто разделить 1 на 2 и получить 0.5
longclaps
19.10.2016 17:06> Формы отображения объектов:
> repr (в виде программного кода, например 6.28300000000004)
> str (более читаемый, например 6.283)
Кратко. Ёмко. Бессмысленно.
antstar
Если есть open, то должен быть и close или with
DeKaNszn
лучше использовать так: