1 of 37

Python. Введение.

Разработка Интернет-приложений. Лекция №3.

2 of 37

Представимся

Юрий Евгеньевич Гапанюк

МГТУ им. Н.Э. Баумана

Игорь Латкин

Mail.Ru Group

Алексей Леонтьев

Mail.Ru Group

Дмитрий Рубцов

Yandex

Александр Опрышко

Mail.Ru Group

Сергей Чернобровкин

KTS Studio

3 of 37

Представимся

Максим Павлов

KTS Studio

Илья Абашин

Cisco Systems

Максим Мялкин

Mail.Ru Group

Григорий Ожегов

KTS Studio

4 of 37

План лекций

  • Вводная лекция
  • Когнитивные карты
  • Python. Основы
  • Python. ООП
  • Python. Функциональные возможности
  • Сеть. TCP, HTTP, DNS
  • HTML, CSS
  • Django. Введение
  • Django. Шаблонизация
  • Базы данных
  • Django. Модели
  • Django. Формы
  • Django. Авторизация
  • Javascript. Основы
  • Javascript. Асинхронность
  • Javascript. Фреймворки. Обзор

5 of 37

Работа в семестре и домашнее задание

6 of 37

Мотивация

7 of 37

Скриптовые языки программирования

8 of 37

Веб-проекты на Python

Python + Django Framework

Используют Python

В основных проектах

9 of 37

Вакансии на Python

10 of 37

11 of 37

История Python

  • 1980-е – задуман Python
  • 1989 – начало разработки языка
  • 1991 – первая публикация кода
  • 16 октября 2000 – выпущена версия 2.0 �(gc, unicode)
  • 3 декабря 2008 – версия 3.0

  • 2010 – Python 2.7
  • 2015 – Python 3.5

Guido van Rossum

12 of 37

13 of 37

Приступим

14 of 37

Синтаксис Python

void foo(int x)�{� if (x == 0) {� bar();� baz();� } else {� qux(x);� foo(x - 1);� }�}

def foo(x):� if x == 0:� bar()� baz()� else:� qux(x)� foo(x - 1)

C++

Python

15 of 37

Синтаксис Python

code = 1�name = "Ivan Ivanov"�score = 17.26�lessons = [� "C++",� "Python",� "Linux"�]�marks = {� "АСОИУ": 5,� "ПКШ": 5,� "Экономика": 4�}

  • Имя переменной может состоять из букв, цифр, _.
  • Двойные и одинарные кавычки равнозначны
  • Все строки – unicode.
  • Переменная в процессе работы программы может менять свои значения и тип.

  • [PEP8] Имена переменных начинаются с маленькой буквы и формируются в snake_case.
  • [PEP8] “Приватные переменные” начинаются с одного или нескольких _.

16 of 37

PEP8

PEP – Python Enhancement Proposals

PEP 8 – Style Guide for Python Code

17 of 37

Синтаксис Python

total = item_one + \� item_two + \� item_three��paragraph = """Говорить по-английски просто!Традиционные методики в школах, ВУЗах,

на многочисленных платных курсах практически не меняются — зубрежка, заучивание грамматики, прослушивание

аудиоуроков."""��print("Hello, Python!") # комментарий

  • Перенос statement осуществляется через обратный слеш (\).
  • Multiline strings – """ string """
  • Комментарии начинаются с #
  • Многострочных комментариев нет. Вместо них используются multiline strings.

18 of 37

Синтаксис Python. Оператор ветвления.

if x >= 10:� print("больше или равно 10")

Операторы сравнения:

== >=

!= <=

> in

< is

x = 14if x >= 10:� print("больше или равно 10")�else:� print("меньше 10")

Любое логическое выражение имеет одно из двух значений:

  • True
  • False

19 of 37

Синтаксис Python. Оператор ветвления.

s = "Волшебный мир python"if "python" in s:� print("Что-то про питон")�elif "c++" in s:� print("Что-то про C++")�else:� print("Непонятно что")

Оператор сравнения in определяет вхождение левого аргумента в правый

20 of 37

Синтаксис Python

if expression: � passelif expression: � passelse: � pass��for i in range(100):� print(i)��while True:� print('hello')� time.sleep(2)��def f(x):� pass

  • Группа выражений может быть объединена в блок
  • Сложные выражения (напр., if, while, for, class, def) содержат заголовочную строку и блок.
  • Заголовочная строка (header line) завершается двоеточием (:).
  • Ключевое слово pass необходимо, чтобы завершить блок, в котором нет выражений.

21 of 37

Синтаксис Python. Функции.

def f(x, y):� z = x ** 2 + y ** 2return z�

z = f(21, 40)�z = f(21, y=40)�z = f(x=21, y=40)

22 of 37

Синтаксис Python

def fib(n):� if n <= 2:� return 1return fib(n - 1) + fib(n - 2)

n1 = fib(1) # = 1

n10 = fib(10) # = 55

  • Объявление функций начинается с ключевого слова def.
  • Т.к. объявления типов в Python нет, то и аргументы функций объявляются просто именами.
  • Значение из функции возвращается с помощью return.
  • Функция может вызывать сама себя (рекурсия).

  • Вызвать функцию можно либо просто передав аргументы позиционно, либо по их именам

23 of 37

Типы данных Python

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

  • Целочисленные (любой точности) - int
    • a = 12
    • b = 10002332
    • c = 230948329482394792834798237498324
  • Числа с плавающей запятой с двойной точностью - float
    • f2 = 3123.784
    • f3 = 12e234
  • Строки (юникодные) - str
    • a = “привет”
  • Массив байт - bytes
    • >>> b = bytes("привет", encoding="utf-8")
    • >>> b
    • B'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
  • Булевый тип - bool
    • 2 объекта: True и False
  • NoneType
    • Единственный объект этого типа – None

24 of 37

Поддерживаемые операторы

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

+ - * / % **

a = 12 + 3 # 15�b = a - 120 # -105�c = 12.1 * 4 # 48.4�d = 12 / 4 # 3.0�mod = 123 % 2 # 1��kb = 2 ** 10 # 1024

Битовые операторы:

& (И) | (ИЛИ) ~ (НЕ) ^ (ИСКЛ. ИЛИ)

Логические операторы:

and, or, not

x = 14�b1 = x > 10 and x < 20 # True�b2 = x < 10 or x > 20 # False��b3 = (x % 2) == 1 # False

25 of 37

Массивы Python

arr1 = [] # Объявили пустой массив�arr2 = list() # То же самое��arr1.append(1) # Добавили в конец 1�arr1.append(2) # Добавили в конец 2print(arr1) # --> [1, 2]��len(arr1) # Размер массива (2)len(arr2) # Размер массива (0)��arr2.append(3)�

arr3 = arr1 + arr2 # Объединение массивов

Массивы – структура данных, представляющая собой непрерывную область памяти, поддерживающая динамическое добавление и удаление элементов.

arr1.remove(2) # Удаление первого вхождения элемента со значением 2�arr1.pop(0) # Удаление элемента с индексом 0

print(2 in arr1) # Проверить, содержится ли элемент со значением 2 в массиве

26 of 37

Синтаксис Python. Оператор цикла for.

for n in arr1:� n2 = n * 2print(n2)

Здесь оператор in используется для итерации по массиву

27 of 37

Синтаксис Python. Оператор цикла for.

print(list(range(5))) # --> [0, 1, 2, 3, 4]��print(list(range(1))) # --> [0]��print(list(range(0))) # --> []

range – функция для генерации массива заданного размера

Зачем нужен list() вокруг range объясним через лекцию.

28 of 37

Массивы Python

# Пройтись по элементам массива (способ №1)for el in arr1:� print(el) # напечатает все элементы��# Пройтись по элементам массива (способ №2)for i in range(len(arr1)):� print(i, arr1[i]) # напечатает все элементы и их индексы��# Пройтись по элементам массива (способ №3)for i, el in enumerate(arr1):� print(i, el) # напечатает все элементы и их индексы

29 of 37

Кортежи Python

t1 = () # Объявили пустой кортеж�t2 = tuple() # То же самое

�t1 = (1, 2, 3)��len(t1) # Размер кортежа (3)len(t2) # Размер кортежа (0)��t3 = t1 + t2 # Объединение кортежей

t4 = ("ninja",) # Кортеж из одного элемента

Кортежи – неизменяемые массивы. Нельзя ни добавить, ни удалить элементы из кортежа.

30 of 37

Словари Python

Словарь - структура данных, отображающая одни объекты (ключи) в другие (значения)

31 of 37

Словари Python

d1 = {� 'doctor': 'Gregory House',� 'pilot': 'Anakin Skywalker',� 'wizard': 'Gandalf The White'�}��print(d1['doctor'])�print(d1['pilot'])�print(d1['president']) # --> KeyErrorprint(d1.get('president')) # --> None��d1['president'] = 'Bill Gates'print(d1['president'])��del d1['doctor'] # Удаление элемента

print(len(d1)) # Число ключей в словаре

print(d1.keys()) # --> ['president', 'wizard', 'pilot']

print(d1.values()) # --> ['Bill Gates', 'Gandalf The White', 'Anakin Skywalker']

32 of 37

Словари Python

# Пройтись по словарю (Способ №1)for key in d1:� print(key, d1[key])��# Пройтись по словарю (Способ №2)for key in d1.keys():� print(key, d1[key])��# Пройтись по словарю (Способ №3)for key, value in d1.items():� print(key, value)

33 of 37

Множества Python

Множество – структура данных, содержащая в себе неповторяющиеся элементы

s1 = set() # Создание пустого множества�s2 = { 101, 1220, 231 }��s3 = set([1, 2, 3, 1, 2, 1, 4]) # == {1, 2, 3, 4}�s4 = { 2, 3, 6, 7 }��s3.add(5) # Добавить элемент в множество

s3.remove(5) # Удалить элемент из множества��s3 & s4 # Пересечение: {2, 3}�s3 | s4 # Объединение: {1, 2, 3, 4, 6, 7}�s3 ^ s4 # XOR: {1, 4, 6, 7}

s1 - s2 # Разность: {1, 4}

34 of 37

Типы данных Python. Резюме.

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

  • Массивы
    • a = [1, 2, 3]
    • b = [“hi”, “hello”, “good morning”]
    • c = [12, “soon”, 42, [1, 2, 3]]
  • Кортежы (неизменяемые массивы)
    • a = (1, 2, 3)
    • b = (“hi”, “hello”, “good morning”)
    • c = (12, “soon”, 42, [1, 2, 3])
    • d = () # пустой кортеж
    • e = (12, ) # кортеж из одного элемента (внимание на запятую)
  • Словари
    • d = { ‘a’: 1, ‘b’: 2, ‘c’: 3 }
  • Множества
    • s1 = { ‘a’, ‘b’, ‘c’ }
    • s2 = set([‘a’, ‘b’, ‘c’, ‘a’, ‘d’]) # == {‘a’, ‘b’, ‘c’, ‘d’}

35 of 37

Как это использовать?

  • Вариант1. Запустить python (python3) в интерактивном режиме

36 of 37

Как это использовать?

  • Вариант 2. Запустить скрипт с написанным заранее кодом из файла с расширением .py (например, my_script.py)

37 of 37

Где это писать?

  • Писать python-скрипты можно в любом текстовом редакторе (Блокнот тоже подойдет).
  • Однако, удобнее иметь подсветку синтаксиса и какие-то подсказки (простые или умные).

Для простого редактирования Python-скриптов подойдет редактор типа Sublime Text, Atom, vim.

Для комфортной работы и разработки мы будем использовать IDE PyCharm Professional.

Ссылка для скачивания – https://www.jetbrains.com/pycharm/download

Для получения лицензии – https://www.jetbrains.com/shop/eform/students