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
UnicodeGIL
В чем измеряется быстродействие?
Метрики
- Время запуска
- Количество запросов в секунду (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