35
WEB-ПРОГРАММИРОВАНИЕ Лекция #5. Введение в язык программирования Python 3 Омский государственный университет им. Ф. М. Достоевского Факультет компьютерных наук Яковенко К. С

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

  • Upload
    -

  • View
    761

  • Download
    21

Embed Size (px)

DESCRIPTION

Web-программирование Лекция #5. Введение в язык программирования Python 3 Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук. Лектор: Яковенко Кирилл Сергеевич.

Citation preview

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

WEB-ПРОГРАММИРОВАНИЕЛекция #5. Введение в язык программирования Python 3

Омский государственный университет им. Ф. М. ДостоевскогоФакультет компьютерных наук

Яковенко К. С

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

2

Python

высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода.

Поддерживаются несколько парадигм программирования:

процедурное программирование

объектно-ориентированное

и в меньшей степени функциональное.

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

3

Компании использующие Python

и многие другие

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

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

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

5

PEP (Python Enhancement Proposal)

— специально разработанный документ, содержащий информацию для сообщества Python или описание новой функции языка, его процессов или окружающей среды.

PEP документ должен содержать краткое описание технических особенностей и обоснование выбора вводимой функции.

Самый известный PEP8: Style Guide for Python Code

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

6

Основы языка

Типы данных

Арифметические и логические операции

Управляющие структуры

ООП

Обработка исключений

Генераторы и декораторы

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

7

Типы данных: Представление чисел

Целочисленные типы

– int(x, base=10) – целые числа

– bool([x]) – логические значения

Типы чисел с плавающей точкой

– float([x]) – числа с плавающей точкой двойной точности

– complex([real[, imag]]) – комплексные числа

– decimal.Decimal(value="0", context=None) – числа фиксированной точности

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

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')

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

9

Типы данных: Строки

последовательность символов с произвольным доступом str(object='')

>>> text = """Строки в тройных кавычках могут включать 'апострофы' и "кавычки" без лишних формальностей. Мы можем даже экранировать символ перевода строки \ благодаря чему данная конкретная строка будет занимать всего две строки."""

>>> a = "Здесь 'апострофы' можно не экранировать, а \"кавычки\" придется."

>>> b = 'Здесь \'апострофы\' придется экранировать, а "кавычки" не обязательно.'

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

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'

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

11

Операции над строками

Операторы сравнения <, <=, ==, !=, > и >=.

Срезы строк, с помощью оператора доступа [ ]seq[start] – извлекает символseq[start:end] – извлекает подстрокуseq[start:end:step] – извлекает последовательность символов с шагом step

Строковые методы.join .split .startswith .endswith .replace и т.д.

Функции и операторы для работы с итерируемыми объектами (рассматриваются ниже)

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

12

Форматирование строк

str.format(*args, **kwargs)

возвращает новую строку, замещая поля в контекстной строке соответствующими аргументами.

Формат полей:

{field_name}{field_name!conversion}{field_name:format_specification}

{field_name!conversion:format_specification}Порядковый номер или имя аргумента

Тип формы представления: строковая (а) или репрезентативная (r)

Спецификатор формата для чисел и последовательностей

Спецификатор формата задается собственным мини-языком (подробнее почитать здесь)

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

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'

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

14

Типы данных: Последовательности

В языке Python имеется пять встроенных типов последовательностей:

list, bytearray, bytes, str, tuple

Это одни из типов данных, поддерживающих оператор проверки на вхождение (in), функцию определения размера (len()), оператор извлечения срезов ([]) и возможность выполнения итераций.

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

15

Типы данных: Множества

— неупорядоченная коллекция из нуля или более ссылок указывающих на хешируемые объекты.

class set([iterable]) class frozenset([iterable])

Хешируемые объекты имеют специальный метод __hash__(), на протяжении всего жизненного цикла объекта всегда возвращающий одно и то же значение, которые могут участвовать в операциях сравнения на равенство.

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

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!'

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

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

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

18

Арифметические и логические операторы

● Оператор идентичности is, is not

● Операторы сравнения <, <=, ==, !=, >=, >

● Оператор членства in, not in

● Логические операторы and, or и not.

● Простые арифметические операторы +, -, *, /

● Комбинированные операторы присваивания +=, -=, *=, /=

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

19

Условное ветвление

Общая схема условной инструкции

if boolean_expression1: suite1elif boolean_expression2: suite2… elif boolean_expressionN: suiteNelse: else_suite

Условное выражение:

expression1 if boolean_expression else expression2

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

20

Циклы

Существует только цикл с предусловием:

while boolean_expression: while_suiteelse: else_suite

Цикл обхода итерируемого множества

for expression in iterable: for_suiteelse: else_suite

Цикл for в Python и С++ или Java не являются эквивалентными конструкциями.

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

21

Обработка исключений

try: try_suiteexcept exception_group1 as variable1: except_suite1except exception_groupN as variableN: except_suiteNelse: else_suitefinally: finally_suite

Порождение исключений:

raise exception(args)raise

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

22

Если этого не достаточно, можно создать собственное:

class exceptionName(baseException): pass

baseException – либо класс Exception, либо его потомок.

object

BaseException

Exception

ArithmeticError

Exception

EnvironmentError EOFError LookupError ValueError

IOError OSError IndexError KeyError

Встроенные исключения

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

23

Функции

Глобальные и локальные функции:

def functionName(parameters): suite return value

Лямбда-функции:

lambda parameters: expression

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

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'

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

25

Генераторы

Функции-генераторы

def generator(parameters): suite yield value suite

Генераторы списков

[expression for item in iterable if condition]

Генераторы словарей

{keyexpression: valueexpression for key, value in iterable if condition}

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

Декораторы функций и методовДекоратор - это функция, которая принимает функцию или метод в качестве единственного аргумента и возвращает новую функцию или метод, включающую декорированную функцию или метод, с дополнительными функциональными возможностями.

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

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

27

Объектно-ориентированная концепция

Абсолютно все в Python является объектом, унаследованым от базового класса object.

Классы в Python поддерживают:

Методы, свойства и атрибуты

Множественное наследование и специализацию классов

Полиморфизм

Используется механизм утиной типизации

Классы в Python не поддерживают:

Перегрузку методов

Управление доступом к данным

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

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

конструктор

деструктор без гарантии вызова

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

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

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

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

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

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 *

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

32

Обзор стандартной библиотеки

string – содержит ряд полезных констант и классов для обработки строк

re – модуль для использования регулярных выражений

optparse, getopt – работа с аргументами командной строки

math, cmath, random – математические библиотеки

calendar, datetime, time – работа с датой и временем

os – платформо независимый доступ к средствам ОС

shutil – высокоуровневые функции для работы с каталогами и файлами

и еще составе свыше 200 пакетов и модулей.

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

33

Сильные стороны Python

Удобный в разработке

– высокая скорость разработки

– простой синтаксис

– набор мощных встроенных инструментов

Свободная лицензия

Кросплатформенность

Легко интегрируемый с другими ЯП/платформами

The Zen of Python, by Tim Petersimport this

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

34

Ограничения Python

Отсутствие типизации

Скорость исполнения кода

GIL – Global Interpreter Lock

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

35

Яковенко Кирилл Сергеевич[email protected]

Омский государственный университет им. Ф. М. ДостоевскогоФакультет компьютерных наук