SlideShare a Scribd company logo
1 of 35
Download to read offline
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.0123456789
87654321')
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'u041fu0440u0438u0432u0435u0442'
>>> u'Привет'
u'u041fu0440u0438u0432u0435u0442'
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 = 7
b = a
a 7
b
a = 7
b = a
a = “Liberty”
a 7
b “Liberty”
— object references
— object in memory
18
Арифметические и логические
операторы
●
Оператор идентичности is, is not
●
Операторы сравнения <, <=, ==, !=, >=, >
●
Оператор членства in, not in
●
Логические операторы and, or и not.
●
Простые арифметические операторы +, -, *, /
●
Комбинированные операторы присваивания +=, -=, *=, /=
19
Условное ветвление
Общая схема условной инструкции
if boolean_expression1:
suite1
elif boolean_expression2:
suite2
…
elif boolean_expressionN:
suiteN
else:
else_suite
Условное выражение:
expression1 if boolean_expression else expression2
20
Циклы
Существует только цикл с предусловием:
while boolean_expression:
while_suite
else:
else_suite
Цикл обхода итерируемого множества
for expression in iterable:
for_suite
else:
else_suite
Цикл for в Python и С++ или Java не являются
эквивалентными конструкциями.
21
Обработка исключений
try:
try_suite
except exception_group1 as variable1:
except_suite1
except exception_groupN as variableN:
except_suiteN
else:
else_suite
finally:
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 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'
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_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
Объектно-ориентированная концепция
Абсолютно все в 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): 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
Модули и пакеты
Модуль в 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
Обзор стандартной библиотеки
string – содержит ряд полезных констант и классов для
обработки строк
re – модуль для использования регулярных выражений
optparse, getopt – работа с аргументами командной строки
math, cmath, random – математические библиотеки
calendar, datetime, time – работа с датой и временем
os – платформо независимый доступ к средствам ОС
shutil – высокоуровневые функции для работы с каталогами и
файлами
и еще составе свыше 200 пакетов и модулей.
33
Сильные стороны Python
Удобный в разработке
– высокая скорость разработки
– простой синтаксис
– набор мощных встроенных инструментов
Свободная лицензия
Кросплатформенность
Легко интегрируемый с другими ЯП/платформами
The Zen of Python, by Tim Peters
import this
34
Ограничения Python
Отсутствие типизации
Скорость исполнения кода
GIL – Global Interpreter Lock
35
Яковенко Кирилл Сергеевич
kirill.yakovenko@gmail.com
Омский государственный университет им. Ф. М. Достоевского
Факультет компьютерных наук

More Related Content

Viewers also liked

Лекция #2. Принцип организации World Wide Web
Лекция #2. Принцип организации World Wide WebЛекция #2. Принцип организации World Wide Web
Лекция #2. Принцип организации World Wide WebЯковенко Кирилл
 
Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст примененияNikita Baksalyar
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияMichael Pankov
 
Rust All Hands Winter 2011
Rust All Hands Winter 2011Rust All Hands Winter 2011
Rust All Hands Winter 2011Patrick Walton
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?PyNSK
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!PyNSK
 
Основы программирования на ruby
Основы программирования на rubyОсновы программирования на ruby
Основы программирования на rubyEvgeny Smirnov
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruAlexander Shcherbinin
 
Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Technopark
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Дмитрий Исаев - Теория тестирования
Дмитрий Исаев - Теория тестированияДмитрий Исаев - Теория тестирования
Дмитрий Исаев - Теория тестированияYandex
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...Claudio Capobianco
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Nikolay Grebenshikov
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простомуNikolay Grebenshikov
 
Ruby: основы ООП
Ruby: основы ООПRuby: основы ООП
Ruby: основы ООПEvgeny Smirnov
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыSergey Nemchinsky
 

Viewers also liked (20)

Лекция #2. Принцип организации World Wide Web
Лекция #2. Принцип организации World Wide WebЛекция #2. Принцип организации World Wide Web
Лекция #2. Принцип организации World Wide Web
 
Введение в программирование
Введение в программированиеВведение в программирование
Введение в программирование
 
Erlang
ErlangErlang
Erlang
 
Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст применения
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
 
Rust All Hands Winter 2011
Rust All Hands Winter 2011Rust All Hands Winter 2011
Rust All Hands Winter 2011
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
Основы программирования на ruby
Основы программирования на rubyОсновы программирования на ruby
Основы программирования на ruby
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ru
 
Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Дмитрий Исаев - Теория тестирования
Дмитрий Исаев - Теория тестированияДмитрий Исаев - Теория тестирования
Дмитрий Исаев - Теория тестирования
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
 
ФСПОиДП 14 лет
ФСПОиДП 14 летФСПОиДП 14 лет
ФСПОиДП 14 лет
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простому
 
Ruby: основы ООП
Ruby: основы ООПRuby: основы ООП
Ruby: основы ООП
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсы
 

Similar to Лекция #5. Введение в язык программирования Python 3

Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)IT-Доминанта
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Alex Ott
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorDevGAMM Conference
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in actionYuri Trukhin
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий solit
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 

Similar to Лекция #5. Введение в язык программирования Python 3 (20)

Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Scala on android
Scala on androidScala on android
Scala on android
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
course js day 2
course js day 2course js day 2
course js day 2
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Scala for android
Scala for androidScala for android
Scala for android
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 

Лекция #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
  • 6. 6 Основы языка Типы данных Арифметические и логические операции Управляющие структуры ООП Обработка исключений Генераторы и декораторы
  • 7. 7 Типы данных: Представление чисел Целочисленные типы – int(x, base=10) – целые числа – bool([x]) – логические значения Типы чисел с плавающей точкой – float([x]) – числа с плавающей точкой двойной точности – complex([real[, imag]]) – комплексные числа – decimal.Decimal(value="0", context=None) – числа фиксированной точности
  • 8. 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.0123456789 87654321') Decimal('54321.012345678987654321')
  • 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 не являются эквивалентными конструкциями.
  • 21. 21 Обработка исключений try: try_suite except exception_group1 as variable1: except_suite1 except exception_groupN as variableN: except_suiteN else: else_suite finally: finally_suite Порождение исключений: raise exception(args) raise
  • 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'
  • 25. 25 Генераторы Функции-генераторы def generator(parameters): suite yield value suite Генераторы списков [expression for item in iterable if condition] Генераторы словарей {keyexpression: valueexpression for key, value in iterable if condition}
  • 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
  • 34. 34 Ограничения Python Отсутствие типизации Скорость исполнения кода GIL – Global Interpreter Lock
  • 35. 35 Яковенко Кирилл Сергеевич kirill.yakovenko@gmail.com Омский государственный университет им. Ф. М. Достоевского Факультет компьютерных наук