Tinkoff Python

Первая лекция

Катаев Денис

План курса

2. Структура проекта и тесты

1. Почему Python?

3. Как работает Python

5. Основы веб сервисов

4. Сеть

6. Базы данных

8. NoSQL

7. Web API

9. Асинхронное программирование

10. Больше о AsyncIO

12. Python как клей

11. Масштабирование

Почему Python?

Почему вы выбрали Python?

Самое важное

  • Приятный синтаксис
  • Низкий порог вхождения
  • Хороший фундамент (import this)
  • Хорошая стандартная библиотека
  • Клей всего со всем
  • ...
  • PROFIT

Скорость разработки

Мем из 2007 года

Проблемы

  • Не самый быстрый
  • Питон 3000
  • Unicode
  • GIL

В чем измеряется быстродействие?

Метрики

  • Время запуска
  • Количество запросов в секунду (RPS)
  • Задержка (latency)
  • Потребление памяти

🤩 O(1)
😃 O(log(n))
😇 O((log(n))^c)
😊 O(n)
☺️ O(n log(n))

Сложность алгоритмов

😐 O(n^1.5)
😕 O(n^2)
😣 O(n^c)
😧 O(c^n)
😢 O(n!)
😭 O(n^n)

Вычислительная сложность

Как Python с этим справляется

За это ответственны разработчики

Правильный выбор структур данных

  • list, tuple

  • dict, set

Базовые структуры

List

Что это за структура?

Выделение с запасом

a = ['a', 'b', 'c', 'd']
a = ['a', 'b', 'c', 'd']
a.append('c')

O(?)

In [1]: lst = []

In [2]: for x in range(100):
   ...:     lst.append(x)

O(352) 😱

In [1]: lst = []

In [2]: for x in range(100):
   ...:     lst.append(x)

Сложность операций

a = [1, 2, 3]

a[n]
a.append(x)
a.insert(0, x)
a.pop(i)

a.sort()

Tuple

В чем отличие от list?

В чем отличие от list?

  • immutable
  • hashable
  • жрет меньше памяти

Dict

d = {'timmy': 'red', 'barry': 'green', 'guido': 'blue'}

entries = [
    ['--', '--', '--'],
    [-8522787127447073495, 'barry', 'green'],
    ['--', '--', '--'],
    ['--', '--', '--'],
    ['--', '--', '--'],
    [-9092791511155847987, 'timmy', 'red'],
    ['--', '--', '--'],
    [-6480567542315338377, 'guido', 'blue']
]

< Python 3.6

  • Рост по 2^n

  • Dummy objects

  • Используется и в object

  • Порядок вставки

  • Удаление во время итерации

Особенности

d = {'timmy': 'red', 'barry': 'green', 'guido': 'blue'}

indices = [None, 1, None, None, None, 0, None, 2]
entries = [
    [-9092791511155847987, 'timmy', 'red'],
    [-8522787127447073495, 'barry', 'green'],
    [-6480567542315338377, 'guido', 'blue']
]

>= Python 3.6

Изменения

  • Меньше памяти
  • Сохранятеся порядок

Сложность операций

a = {'a': 2, 'b':3}

a['a']
a['c'] = 3
a.pop('c')

list(a)

Set

Dict без значений

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

dict.keys - set like

frozenset

Теперь банановый

Сортированные

sortedcontainers

  • Sorted List
  • Sorted Dict
  • Sorted Set

 

Есть поддержка bisect

argparse

import sys

if len(sys.argv) < 2:
    print('no args)


if sys.argv[1] == 'print':
    print(sys.argv)
d.kataev:~§ python args.py
no args
d.kataev:~§ python args.py test
d.kataev:~§ python args.py print
['args.py', 'print']
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('action')

if __name__ == '__main__':
    args = parser.parse_args()
    
    if args.action == 'print':
        print('hello')

Заключение

Вопросы по лекции?

Финтех лекция 1

By Denis Kataev

Финтех лекция 1

  • 550