python
shabтипы в питоне
int любого размера, есть еще bin oct и hex формы
float, есть запись в форме научной записи
>>> type(10) <class 'int'> >>> type(4.2) <class 'float'> >>> 4.2e-4 0.00042
есть комплексные числа
>>> type(2+3j) <class 'complex'>
строки
>>> type("I am a string.") <class 'str'>
есть форма f (форматированная строка) и r (пропустить ескейп-сиквенсы).
bool
>>> type(True) <class 'bool'> >>> bool('') False >>> bool([0]) True >>> bool(0) False >>> bool(.4) True
composite data types
list [item, item] // mutable
dictionary {'key': value} //mutable
tuple (item, item) // immutable
set {item, item} // mutable
Декораторы
нужны чтобы модифицировать поведение функции.
@decorator def func(): ...
это простой способ сказать
def func(): ... func = my_decorator(func)
можно декорировать методы класса, и сам класс
стандартные декораторы класса
@staticmethod нет референсов, только неймспейс класса @property установить геттеры сеттеры @classmethod референс только к классу import functools
обычный шаблон декоратора
import functools def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): func(*args, **kwargs) return func(*args, **kwargs) return wrapper
итератор
это объект по которому можно итерировать
__iter__() возвращает итератор __next__() возвращает следующий элемент из итератора my_iter = iter([1,2,3]) print(next(my_iter)) # 1 print(next(my_iter)) # 2
цикл for по сути это
for element in iterable:
в __next__() нужно правильно поднять StopIteration ошибку
генератор
yield возвращает значение функции, но не прекращает ее а ставит на паузу
генератор возвращает итератор, __name__() и __iter__() определены автоматически
generator expression типо list comprehension
(x**2 for x in my_list)
- легко создавать
- экономят память
- могуть быть бесконечными
контекстный менеджер
class File(): def __init__(self, filename, mode): self.filename = filename self.mode = mode def __enter__(self): self.open_file = open(self.filename, self.mode) return self.open_file # возвращает то что нужно менеджить def __exit__(self, *args): self.open_file.close() # очистка после завершения
это класс с определенными методами __enter__() и __exit__()
выполняет конструкцию
try: ... # enter except: ... finally: ... # exit
формат
with <Manager>() as infile: # infile returned from __enter() ...
async await
Parallelism - выполнение нескольких операций одновременно
Multiprocessing - способ обеспечить параллелизм распределением задач по процессорам. хорошо подходит для CPU-bound tasks (время выполнения зависит от мощности процессора)
Global Interpreter Lock - только один поток может управлять питоном, нужно для безопасности памяти
Threading - несколько потоков выполняют задания поочереди, хорошо подходит для IO-bound tasks (время зависит от ожидания ввода вывода типо http request)
async IO - работает на одном потоке в одном ядре
async - ключевое слово для создания асинхронного генератора
await - возвращает контроль обратно в ивент луп
выражение await f() передаст контроль в ивент луп до момента когда f() вернет значение
async def g(): # Pause here and come back to g() when f() is ready r = await f() return r
дописать...