WEB-ПРОГРАММИРОВАНИЕЛекция #5. Введение в язык программирования Python 3
Омский государственный университет им. Ф. М. ДостоевскогоФакультет компьютерных наук
Яковенко К. С
2
Python
высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода.
Поддерживаются несколько парадигм программирования:
процедурное программирование
объектно-ориентированное
и в меньшей степени функциональное.
3
Компании использующие Python
и многие другие
4
История развитияязыка программирования Python
Python 1.0 - январь 1994
– Python 1.5 - 31 декабря 1997
– Python 1.6 - 5 сентября 2000
Python 2.0 - 16 октября 2000
– Python 2.1 - 17 апреля 2001
– Python 2.2 - 21 декабря 2001
– Python 2.3 - 29 июля 2003
– Python 2.4 - 30 ноября 2004
– Python 2.5 - 19 сентября 2006
– Python 2.6 - 1 октября 2008
– Python 2.7 - 3 июля 2010
Python 3.0 - 3 декабря 2008
— Python 3.1 - 27 июня 2009
— Python 3.2 - 20 февраля 2011
— Python 3.3 - 29 сентября 2012
— Python 3.4 - 16 марта 2014
5
PEP (Python Enhancement Proposal)
— специально разработанный документ, содержащий информацию для сообщества Python или описание новой функции языка, его процессов или окружающей среды.
PEP документ должен содержать краткое описание технических особенностей и обоснование выбора вводимой функции.
Самый известный PEP8: Style Guide for Python Code
6
Основы языка
Типы данных
Арифметические и логические операции
Управляющие структуры
ООП
Обработка исключений
Генераторы и декораторы
7
Типы данных: Представление чисел
Целочисленные типы
– int(x, base=10) – целые числа
– bool([x]) – логические значения
Типы чисел с плавающей точкой
– float([x]) – числа с плавающей точкой двойной точности
– complex([real[, imag]]) – комплексные числа
– decimal.Decimal(value="0", context=None) – числа фиксированной точности
8
Представление чисел (примеры)
Целые числа:
>>> 14600926, 0b110111101, 0o67545336, 0xDECADE(14600926, 445, 14600926, 14600926)
>>> int(14600926), int('14600926'), int('67545336', 8)(14600926, 14600926, 14600926)
>>> int('DECADE', 16), int('110111101', 2), bool(14600926), bool()(14600926, 445, True, False)
Числа с плавающей точкой:
>>> 0.0, 5.4, -2.5, 8.9e-4(0.0, 5.4, -2.5, 0.00089)
>>> -89.5+2.125j, complex(-89.5, 2.125)((-89.5+2.125j), (-89.5+2.125j))
>>> import decimal>>>decimal.Decimal('54321.012345678987654321')Decimal('54321.012345678987654321')
9
Типы данных: Строки
последовательность символов с произвольным доступом str(object='')
>>> text = """Строки в тройных кавычках могут включать 'апострофы' и "кавычки" без лишних формальностей. Мы можем даже экранировать символ перевода строки \ благодаря чему данная конкретная строка будет занимать всего две строки."""
>>> a = "Здесь 'апострофы' можно не экранировать, а \"кавычки\" придется."
>>> b = 'Здесь \'апострофы\' придется экранировать, а "кавычки" не обязательно.'
10
Unicode
Все строки в Python 3 по умолчанию задаются в Unicode символах.
str(object=b'', encoding='utf-8', errors='strict')
В Python 2 используется функция
unicode(object[, encoding[, errors]])
или спецификатор u перед строкой.
>>> unicode("Привет", "UTF-8")u'\u041f\u0440\u0438\u0432\u0435\u0442'
>>> u'Привет'u'\u041f\u0440\u0438\u0432\u0435\u0442'
11
Операции над строками
Операторы сравнения <, <=, ==, !=, > и >=.
Срезы строк, с помощью оператора доступа [ ]seq[start] – извлекает символseq[start:end] – извлекает подстрокуseq[start:end:step] – извлекает последовательность символов с шагом step
Строковые методы.join .split .startswith .endswith .replace и т.д.
Функции и операторы для работы с итерируемыми объектами (рассматриваются ниже)
12
Форматирование строк
str.format(*args, **kwargs)
возвращает новую строку, замещая поля в контекстной строке соответствующими аргументами.
Формат полей:
{field_name}{field_name!conversion}{field_name:format_specification}
{field_name!conversion:format_specification}Порядковый номер или имя аргумента
Тип формы представления: строковая (а) или репрезентативная (r)
Спецификатор формата для чисел и последовательностей
Спецификатор формата задается собственным мини-языком (подробнее почитать здесь)
13
Примеры работы со строками
Вставка подстроки в строку:s = 'The waxwork man's = s[:12] + 'wo' + s[12:] # результат 'The waxwork woman'
Инвертирование строкиs = s[::-1] # результат 'namow krowxaw ehT'
Замена подстрокиs = s.replace('woman', 'man') # результат 'The waxwork man'
Разбиение на словаs = s.split(' ') # результат ['The', 'waxwork', 'man']
Форматирование'{who} turned {0} this year'.format(88, who="She")# результат 'She turned 88 this year'
14
Типы данных: Последовательности
В языке Python имеется пять встроенных типов последовательностей:
list, bytearray, bytes, str, tuple
Это одни из типов данных, поддерживающих оператор проверки на вхождение (in), функцию определения размера (len()), оператор извлечения срезов ([]) и возможность выполнения итераций.
15
Типы данных: Множества
— неупорядоченная коллекция из нуля или более ссылок указывающих на хешируемые объекты.
class set([iterable]) class frozenset([iterable])
Хешируемые объекты имеют специальный метод __hash__(), на протяжении всего жизненного цикла объекта всегда возвращающий одно и то же значение, которые могут участвовать в операциях сравнения на равенство.
16
Типы данных: Словари
— неупорядоченная коллекция из нуля или более пар «ключ-значение», в которых в качестве ключей могут использоваться ссылки на хешируемые объекты, а в качестве значений – ссылки на объекты любого типа.
class dict(**kwargs)class dict(mapping, **kwargs)class dict(iterable, **kwargs)>>> d = {"root": 18, "blue": [75, "R", 2], 21: "venus", -14: None,… "mars": "rover", (4, 11): 18, 0: 45}>>> d[21] = 'Hello World!'>>> d[21]'Hello World!'
17
Типы данных: Ссылки
В языке Python нет переменных как таковых – вместо них используются ссылки на объекты.
objectReference = value
a = 7 a 7
a = 7b = a
a 7
b
a = 7b = aa = “Liberty”
a 7
b “Liberty”
— object references
— object in memory
18
Арифметические и логические операторы
● Оператор идентичности is, is not
● Операторы сравнения <, <=, ==, !=, >=, >
● Оператор членства in, not in
● Логические операторы and, or и not.
● Простые арифметические операторы +, -, *, /
● Комбинированные операторы присваивания +=, -=, *=, /=
19
Условное ветвление
Общая схема условной инструкции
if boolean_expression1: suite1elif boolean_expression2: suite2… elif boolean_expressionN: suiteNelse: else_suite
Условное выражение:
expression1 if boolean_expression else expression2
20
Циклы
Существует только цикл с предусловием:
while boolean_expression: while_suiteelse: else_suite
Цикл обхода итерируемого множества
for expression in iterable: for_suiteelse: else_suite
Цикл for в Python и С++ или Java не являются эквивалентными конструкциями.
21
Обработка исключений
try: try_suiteexcept exception_group1 as variable1: except_suite1except exception_groupN as variableN: except_suiteNelse: else_suitefinally: finally_suite
Порождение исключений:
raise exception(args)raise
22
Если этого не достаточно, можно создать собственное:
class exceptionName(baseException): pass
baseException – либо класс Exception, либо его потомок.
object
BaseException
Exception
ArithmeticError
Exception
EnvironmentError EOFError LookupError ValueError
IOError OSError IndexError KeyError
Встроенные исключения
23
Функции
Глобальные и локальные функции:
def functionName(parameters): suite return value
Лямбда-функции:
lambda parameters: expression
24
Функции: примеры использования
Площадь треугольника по формуле Герона:
import mathdef heron(a, b, c, unit='meters'): s = (a + b + c) / 2.0 area = math.sqrt(s * (s - a) * (s - b) * (s - c)) return '{0} {1}'.format(area, unit)
heron(25, 24, 7) # вернет '84.0 meters'heron(25, 24) # породит исключение TypeErrorheron(25, c=7, b=24, unit='sm') # вернет '84.0 sm'heron(*[25, 24, 7], unit='mm') # вернет '84.0 mm'
25
Генераторы
Функции-генераторы
def generator(parameters): suite yield value suite
Генераторы списков
[expression for item in iterable if condition]
Генераторы словарей
{keyexpression: valueexpression for key, value in iterable if condition}
Декораторы функций и методовДекоратор - это функция, которая принимает функцию или метод в качестве единственного аргумента и возвращает новую функцию или метод, включающую декорированную функцию или метод, с дополнительными функциональными возможностями.
def positive_result(function): def wrapper(*args, **kwargs): result = function(*args, **kwargs) assert result >= 0, function.__name__ + "() result isn't >= 0" return result return wrapper
@positive_resultdef discriminant(a, b, c): return (b ** 2) - (4 * a * c)
discriminant(1, 8, 7) # вывод 36discriminant(5, 6, 7) # исключение AssertionError: discriminant() result isn't >= 0
27
Объектно-ориентированная концепция
Абсолютно все в Python является объектом, унаследованым от базового класса object.
Классы в Python поддерживают:
Методы, свойства и атрибуты
Множественное наследование и специализацию классов
Полиморфизм
Используется механизм утиной типизации
Классы в Python не поддерживают:
Перегрузку методов
Управление доступом к данным
28
КлассыСинтаксис опрделенияclass className(base_classes): suite
class className(object): classAttr = value
def __new__(cls, *args, **kwargs): suite
def __init__(self, *args, **kwargs): suite
def __del__(self): suite
Инициализация объектаclassInstance = className(parameters)del classInstance
конструктор
деструктор без гарантии вызова
29
Классы: использование свойствСвойство – это элемент данных объекта, доступ к которым оформляется как доступ к переменной экземпляра, но само обращение неявно обслуживается встроенными методами.
class A(object): def __init__(self): self._x = None
@property def x(self): return self._x
@x.setter def x(self, value): self._x = value
@x.deleter def x(self): del self._x
30
Классы: вызов родительских методов
осуществляется с помощью функцииsuper([type[, object-or-type]])
class A(object): passclass B(object): pass
class C(B, A): def __init__(self, *args, **kwargs): # self.__class__.__mro__ = [C, B, A, objects] super().__init__(*args, **kwargs) # super(C, self).__init__() => B.__init__(self) # super(B, self).__init__() => A.__init__(self) # super(A, self).__init__() => object.__init__(self)
Вычисление метода строится на основе алгоритма определения порядка разрешения методов MRO C3
31
Модули и пакеты
Модуль в Python – это обычный файл с расширением .ру
Импортирование модулей:import importableimport importablel, importable2, …, importableNimport importable as preferred_name
Пакет – это простой каталог, содержащий множество модулей и файл с именем __init__ .ру.
Импортирование из моделуй и пакетов:from importable import object as preferred_namefrom importable import object1, object2, …, objectNfrom importable import (object1, object2, object3, …, objectN)from importable import *
32
Обзор стандартной библиотеки
string – содержит ряд полезных констант и классов для обработки строк
re – модуль для использования регулярных выражений
optparse, getopt – работа с аргументами командной строки
math, cmath, random – математические библиотеки
calendar, datetime, time – работа с датой и временем
os – платформо независимый доступ к средствам ОС
shutil – высокоуровневые функции для работы с каталогами и файлами
и еще составе свыше 200 пакетов и модулей.
33
Сильные стороны Python
Удобный в разработке
– высокая скорость разработки
– простой синтаксис
– набор мощных встроенных инструментов
Свободная лицензия
Кросплатформенность
Легко интегрируемый с другими ЯП/платформами
The Zen of Python, by Tim Petersimport this
34
Ограничения Python
Отсутствие типизации
Скорость исполнения кода
GIL – Global Interpreter Lock
35
Яковенко Кирилл Сергеевич[email protected]
Омский государственный университет им. Ф. М. ДостоевскогоФакультет компьютерных наук
Top Related