Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Лекция #5. Введение в язык программирования Python 3
1. WEB-ПРОГРАММИРОВАНИЕ
Лекция #5. Введение в язык программирования Python 3
Омский государственный университет им. Ф. М. Достоевского
Факультет компьютерных наук
Яковенко К. С
2. 2
Python
высокоуровневый язык программирования общего назначения,
ориентированный на повышение производительности
разработчика и читаемости кода.
Поддерживаются несколько парадигм программирования:
процедурное программирование
объектно-ориентированное
и в меньшей степени функциональное.
4. 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. 5
PEP (Python Enhancement Proposal)
— специально разработанный документ, содержащий
информацию для сообщества Python или описание
новой функции языка, его процессов или окружающей
среды.
PEP документ должен содержать краткое описание
технических особенностей и обоснование выбора
вводимой функции.
Самый известный PEP8: Style Guide for Python Code
7. 7
Типы данных:
Представление чисел
Целочисленные типы
– int(x, base=10) – целые числа
– bool([x]) – логические значения
Типы чисел с плавающей точкой
– float([x]) – числа с плавающей точкой двойной точности
– complex([real[, imag]]) – комплексные числа
– decimal.Decimal(value="0", context=None) – числа
фиксированной точности
9. 9
Типы данных: Строки
последовательность символов с произвольным доступом
str(object='')
>>> text = """Строки в тройных кавычках могут включать 'апострофы' и
"кавычки" без лишних формальностей. Мы можем даже экранировать
символ перевода строки благодаря чему данная конкретная строка
будет занимать всего две строки."""
>>> a = "Здесь 'апострофы' можно не экранировать, а "кавычки"
придется."
>>> b = 'Здесь 'апострофы' придется экранировать, а "кавычки" не
обязательно.'
10. 10
Unicode
Все строки в Python 3 по умолчанию задаются
в Unicode символах.
str(object=b'', encoding='utf-8', errors='strict')
В Python 2 используется функция
unicode(object[, encoding[, errors]])
или спецификатор u перед строкой.
>>> unicode("Привет","UTF-8")
u'u041fu0440u0438u0432u0435u0442'
>>> u'Привет'
u'u041fu0440u0438u0432u0435u0442'
11. 11
Операции над строками
Операторы сравнения <, <=, ==, !=, > и >=.
Срезы строк, с помощью оператора доступа [ ]
seq[start] – извлекает символ
seq[start:end] – извлекает подстроку
seq[start:end:step] – извлекает последовательность символов
с шагом step
Строковые методы
.join .split .startswith .endswith .replace и т.д.
Функции и операторы для работы с итерируемыми
объектами (рассматриваются ниже)
12. 12
Форматирование строк
str.format(*args,**kwargs)
возвращает новую строку, замещая поля в контекстной строке
соответствующими аргументами.
Формат полей:
{field_name}
{field_name!conversion}
{field_name:format_specification}
{field_name!conversion:format_specification}
Порядковый номер или
имя аргумента
Тип формы представления:
строковая (а) или
репрезентативная (r)
Спецификатор формата для
чисел и последовательностей
Спецификатор формата задается собственным мини-языком (подробнее почитать здесь)
13. 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. 14
Типы данных: Последовательности
В языке Python имеется пять встроенных типов
последовательностей:
list, bytearray, bytes, str, tuple
Это одни из типов данных, поддерживающих оператор
проверки на вхождение (in), функцию определения
размера (len()), оператор извлечения срезов ([]) и
возможность выполнения итераций.
15. 15
Типы данных: Множества
— неупорядоченная коллекция из нуля или более ссылок
указывающих на хешируемые объекты.
class set([iterable]) class frozenset([iterable])
Хешируемые объекты имеют специальный метод __hash__(), на
протяжении всего жизненного цикла объекта всегда
возвращающий одно и то же значение, которые могут участвовать
в операциях сравнения на равенство.
16. 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. 17
Типы данных: Ссылки
В языке Python нет переменных как таковых – вместо них
используются ссылки на объекты.
objectReference = value
a = 7 a 7
a = 7
b = a
a 7
b
a = 7
b = a
a = “Liberty”
a 7
b “Liberty”
— object references
— object in memory
18. 18
Арифметические и логические
операторы
●
Оператор идентичности is, is not
●
Операторы сравнения <, <=, ==, !=, >=, >
●
Оператор членства in, not in
●
Логические операторы and, or и not.
●
Простые арифметические операторы +, -, *, /
●
Комбинированные операторы присваивания +=, -=, *=, /=
19. 19
Условное ветвление
Общая схема условной инструкции
if boolean_expression1:
suite1
elif boolean_expression2:
suite2
…
elif boolean_expressionN:
suiteN
else:
else_suite
Условное выражение:
expression1 if boolean_expression else expression2
20. 20
Циклы
Существует только цикл с предусловием:
while boolean_expression:
while_suite
else:
else_suite
Цикл обхода итерируемого множества
for expression in iterable:
for_suite
else:
else_suite
Цикл for в Python и С++ или Java не являются
эквивалентными конструкциями.
22. 22
Если этого не достаточно, можно создать собственное:
class exceptionName(baseException): pass
baseException – либо класс Exception, либо его потомок.
object
BaseException
Exception
ArithmeticError
Exception
EnvironmentError EOFError LookupError ValueError
IOError OSError IndexError KeyError
Встроенные исключения
23. 23
Функции
Глобальные и локальные функции:
def functionName(parameters):
suite
return value
Лямбда-функции:
lambda parameters: expression
24. 24
Функции: примеры использования
Площадь треугольника по формуле Герона:
import math
def 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) # породит исключение TypeError
heron(25, c=7, b=24, unit='sm') # вернет '84.0 sm'
heron(*[25, 24, 7], unit='mm') # вернет '84.0 mm'
26. Декораторы функций и методов
Декоратор - это функция, которая принимает функцию или метод в качестве
единственного аргумента и возвращает новую функцию или метод,
включающую декорированную функцию или метод, с дополнительными
функциональными возможностями.
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_result
def discriminant(a, b, c):
return (b ** 2) - (4 * a * c)
discriminant(1, 8, 7) # вывод 36
discriminant(5, 6, 7) # исключение AssertionError: discriminant() result isn't >= 0
27. 27
Объектно-ориентированная концепция
Абсолютно все в Python является объектом, унаследованым
от базового класса object.
Классы в Python поддерживают:
Методы, свойства и атрибуты
Множественное наследование и специализацию классов
Полиморфизм
Используется механизм утиной типизации
Классы в Python не поддерживают:
Перегрузку методов
Управление доступом к данным
28. 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. 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. 30
Классы: вызов родительских методов
осуществляется с помощью функции
super([type[, object-or-type]])
class A(object): pass
class 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. 31
Модули и пакеты
Модуль в Python – это обычный файл с расширением .ру
Импортирование модулей:
import importable
import importablel, importable2, …, importableN
import importable as preferred_name
Пакет – это простой каталог, содержащий множество модулей
и файл с именем __init__ .ру.
Импортирование из моделуй и пакетов:
from importable import object as preferred_name
from importable import object1, object2, …, objectN
from importable import (object1, object2, object3, …, objectN)
from importable import *
32. 32
Обзор стандартной библиотеки
string – содержит ряд полезных констант и классов для
обработки строк
re – модуль для использования регулярных выражений
optparse, getopt – работа с аргументами командной строки
math, cmath, random – математические библиотеки
calendar, datetime, time – работа с датой и временем
os – платформо независимый доступ к средствам ОС
shutil – высокоуровневые функции для работы с каталогами и
файлами
и еще составе свыше 200 пакетов и модулей.
33. 33
Сильные стороны Python
Удобный в разработке
– высокая скорость разработки
– простой синтаксис
– набор мощных встроенных инструментов
Свободная лицензия
Кросплатформенность
Легко интегрируемый с другими ЯП/платформами
The Zen of Python, by Tim Peters
import this