В python типы данных можно разделить на 2 группы:
Неизменяемые: int
, float
, string
, bool
, NoneType
, tuple
, frozenset
Изменяемые: list
, dict
, set
Механизм неизменяемости (immutability) типов данных в Python заключается в том, что объекты этих типов не могут быть изменены после создания. Когда вы пытаетесь изменить значение объекта неизменяемого типа, создается новый объект вместо модификации существующего. Это обеспечивает надежность и предсказуемость в работе с данными. Например, когда вы конкатенируете строки или выполняете арифметические операции с числами, вы создаете новые объекты, а исходные данные остаются неизменными.
==
от is
?== сравнивает 2 операнда по значениям, а is
по адресам в памяти
Неизменяемые передаются по значению, а изменяемые по ссылке Параметры по умолчанию python высчитывает во время компиляции кода!!
def some_foo(some_args: list = []):
some_args.append(1)
return some_args
print(some_foo()) # [1]
print(some_foo()) # [1, 1]
print(some_foo()) # [1, 1, 1]
args
— такой аргумент, который принимает в себя неограниченной количество позиционных аргументов функции
kwargs
— аргумент, который принимает в себя неограниченное количество аргументов, с помощью ключевых слов
args
— tuple
kwargs
— dict
args
и kwargs
— не обязательное название (просто название)
Аннотации типов — подсказка типа данных к аргументу, переменной итд указывается после названия и двоеточия Используется в функциях, классах итд Аннотации не выполняются в runtime (то есть, если передадим аргумент другого типа, ошибки не будет). Обычно нужны для линтера и другого программиста. Единственный кейс, когда аннотации проверяют тип — различные библиотеки типа pydantic Статья на habr
lambda
функция и какие кейсы её применения?Lambda функция — это анонимная функция (без имени). Функция может принять неограниченное количество аргументов и в функции содержится неявный return
from functools import reduce
lst = [1, 2, 3]
print(list(map(lambda x: x + 1, lst))) # [2, 3, 4]
print(list(filter(lambda x: x % 2, lst))) # [1, 3]
print(reduce(lambda x, y: x + y, lst, 1)) # 7
print(reduce(lambda x, y: x + y, lst, 10)) # 16
Тернарный оператор — ветвление в 1 строку для лаконичности синтаксиса
some = True
res = 1 if some else 0
print(res) # 1