python

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

дописать...





Report Page