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

What's hot

BPMN과 JIRA를 활용한 프로세스 중심 업무 혁신 실천법
BPMN과 JIRA를 활용한 프로세스 중심 업무 혁신 실천법BPMN과 JIRA를 활용한 프로세스 중심 업무 혁신 실천법
BPMN과 JIRA를 활용한 프로세스 중심 업무 혁신 실천법철민 신
 
Software architecture for high traffic website
Software architecture for high traffic websiteSoftware architecture for high traffic website
Software architecture for high traffic websiteTung Nguyen Thanh
 
Gestion de projets agiles avec scrum
Gestion de projets agiles avec scrumGestion de projets agiles avec scrum
Gestion de projets agiles avec scrumPierre E. NEIS
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with FlinkSanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with FlinkFlink Forward
 
Introduction à l'agilité ensmse
Introduction à l'agilité   ensmseIntroduction à l'agilité   ensmse
Introduction à l'agilité ensmseagnes_crepet
 
Wstęp do SCRUM - jak dostarczyć właściwe oprogramowanie
Wstęp do SCRUM - jak dostarczyć właściwe oprogramowanieWstęp do SCRUM - jak dostarczyć właściwe oprogramowanie
Wstęp do SCRUM - jak dostarczyć właściwe oprogramowanieMaciej Grajcarek
 
An Introduction to Gradle for Java Developers
An Introduction to Gradle for Java DevelopersAn Introduction to Gradle for Java Developers
An Introduction to Gradle for Java DevelopersKostas Saidis
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Aree Oh
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling RewriterJustin Edelson
 
Introduction to NGINX web server
Introduction to NGINX web serverIntroduction to NGINX web server
Introduction to NGINX web serverMd Waresul Islam
 
Módulo 7. Gestión de proyectos ágiles
Módulo 7. Gestión de proyectos ágilesMódulo 7. Gestión de proyectos ágiles
Módulo 7. Gestión de proyectos ágilesJohnny Ordóñez
 
Concurrent Programming Using the Disruptor
Concurrent Programming Using the DisruptorConcurrent Programming Using the Disruptor
Concurrent Programming Using the DisruptorTrisha Gee
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012Daum DNA
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
Introduction to Agile - Scrum, Kanban, and everything in between
Introduction to Agile - Scrum, Kanban, and everything in betweenIntroduction to Agile - Scrum, Kanban, and everything in between
Introduction to Agile - Scrum, Kanban, and everything in betweenPravin Kumar Singh, PMP, PSM
 

What's hot (20)

BPMN과 JIRA를 활용한 프로세스 중심 업무 혁신 실천법
BPMN과 JIRA를 활용한 프로세스 중심 업무 혁신 실천법BPMN과 JIRA를 활용한 프로세스 중심 업무 혁신 실천법
BPMN과 JIRA를 활용한 프로세스 중심 업무 혁신 실천법
 
Software architecture for high traffic website
Software architecture for high traffic websiteSoftware architecture for high traffic website
Software architecture for high traffic website
 
Gestion de projets agiles avec scrum
Gestion de projets agiles avec scrumGestion de projets agiles avec scrum
Gestion de projets agiles avec scrum
 
Scrum
Scrum Scrum
Scrum
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
Agile scrum training
Agile scrum trainingAgile scrum training
Agile scrum training
 
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with FlinkSanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
 
Introduction à l'agilité ensmse
Introduction à l'agilité   ensmseIntroduction à l'agilité   ensmse
Introduction à l'agilité ensmse
 
Scrum
ScrumScrum
Scrum
 
Wstęp do SCRUM - jak dostarczyć właściwe oprogramowanie
Wstęp do SCRUM - jak dostarczyć właściwe oprogramowanieWstęp do SCRUM - jak dostarczyć właściwe oprogramowanie
Wstęp do SCRUM - jak dostarczyć właściwe oprogramowanie
 
An Introduction to Gradle for Java Developers
An Introduction to Gradle for Java DevelopersAn Introduction to Gradle for Java Developers
An Introduction to Gradle for Java Developers
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling Rewriter
 
Introduction to NGINX web server
Introduction to NGINX web serverIntroduction to NGINX web server
Introduction to NGINX web server
 
Módulo 7. Gestión de proyectos ágiles
Módulo 7. Gestión de proyectos ágilesMódulo 7. Gestión de proyectos ágiles
Módulo 7. Gestión de proyectos ágiles
 
Scrumban
ScrumbanScrumban
Scrumban
 
Concurrent Programming Using the Disruptor
Concurrent Programming Using the DisruptorConcurrent Programming Using the Disruptor
Concurrent Programming Using the Disruptor
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
Introduction to Agile - Scrum, Kanban, and everything in between
Introduction to Agile - Scrum, Kanban, and everything in betweenIntroduction to Agile - Scrum, Kanban, and everything in between
Introduction to Agile - Scrum, Kanban, and everything in between
 

Viewers also liked

Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЯковенко Кирилл
 
Лекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологийЛекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологийЯковенко Кирилл
 
Лекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страницЛекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страницЯковенко Кирилл
 
Лекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилейЛекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилейЯковенко Кирилл
 
Лекция #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
 

Viewers also liked (20)

Лекция #7. Django ORM
Лекция #7. Django ORMЛекция #7. Django ORM
Лекция #7. Django ORM
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-framework
 
Лекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологийЛекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологий
 
Лекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страницЛекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страниц
 
Лекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилейЛекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилей
 
Лекция #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. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
 

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 Омский государственный университет им. Ф. М. Достоевского Факультет компьютерных наук