Передача func() вместо func
Если написать скобки, передаётся результат вызова, а не сама функция.
def square(x):
return x * x
def apply(func, value):
return func(value)
# правильно: передаём ссылку
print(apply(square, 5))
# неправильно: apply(square(5), 5) вызовет ошибкуЗабытый list() вокруг map/filter
map и filter возвращают ленивые итераторы. Для вывода их нужно преобразовать в список.
numbers = [1, 2, 3, 4]
squares = list(map(lambda x: x ** 2, numbers))
print(squares)Изменение frozenset
У frozenset нет методов add и remove. Для изменяемого множества используйте set.
frozen = frozenset([1, 2, 3])
# frozen.add(4) # AttributeError
mutable = set(frozen)
mutable.add(4)
print(mutable)Попытка использовать set как ключ словаря
Обычное множество не хешируемо. Если нужно множество в качестве ключа, используйте frozenset.
# keys = { {1, 2}: "value" } # TypeError
keys = { frozenset([1, 2]): "value" }
print(keys)Слишком сложная lambda
Если выражение не умещается в одну строку, лучше заменить lambda именованной функцией.
def order_key(person):
name, age = person
return -age, name
people = [("Mike", 19), ("Nancy", 35)]
print(sorted(people, key=order_key))