Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+694новые вакансии за сутки·52 494вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 662
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python6 244
  • Облачные технологии4 749
  • QA вакансии1 736
  • Android1 148
  • Инженер данных800
  • Продакт-менеджер321

Разработка

  • iOS1 092
  • Backend вакансии1 046
  • Fullstack вакансии453
  • AI вакансии391
  • Frontend вакансии376
  • Mobile вакансии27

По стеку

  • Go3 590
  • Java2 153
  • Kotlin942
  • Node.js767
  • Rust544
  • .NET496
  • PHP267
  • C++220
  • C#198

DevOps и инфраструктура

  • Kubernetes2 686
  • Linux-инфраструктура2 117
  • DevOps вакансии1 960
  • Terraform / IaC1 615
  • CI/CD871
  • Мониторинг и Observability742
  • SRE228
  • Кибербезопасность47

Аналитика и данные

  • Аналитик данных495
  • Data Scientist449
  • Бизнес-аналитик351
  • Системный аналитик54

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США23 835
  • Вакансии в Европе9 341
  • Работа в России3 283
  • Вакансии в Канаде2 140

По формату

  • Удалённые вакансии41 311
  • Релокация в США23 835
  • Гибридная работа4 058
  • Офисная работа2 949

По уровню

  • Senior вакансии20 396
  • Middle вакансии11 620
  • Junior вакансии3 665

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Wise139 вакансий
  • Grab134 вакансии
  • Infobip28 вакансий
  • Adyen23 вакансии
  • Darktrace17 вакансий
  • Spotify15 вакансий
  • Celonis11 вакансий
  • Razorpay9 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PythonВсе вопросы
PythonJuniorКодинг

Что выведет def f(x, lst=[]): lst.append(x); return lst при двух последовательных вызовах и почему?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Выведет [1], затем [1, 2]. Дефолтный список создаётся один раз при выполнении def и сохраняется в f.__defaults__. Все вызовы без аргумента lst используют тот же объект, потому он накапливает добавления. Безопасный паттерн: lst=None и lst = lst if lst is not None else [].

Точный вывод и почему

def f(x, lst=[]):
    lst.append(x)
    return lst

print(f(1))    # [1]
print(f(2))    # [1, 2]   — тот же список!
print(f(3))    # [1, 2, 3]
print(f.__defaults__)   # ([1, 2, 3],) — сидит на функции

Причина: Python вычисляет default values один раз — в момент исполнения def (обычно при импорте модуля). Результаты сохраняются в кортеже func.__defaults__. При каждом вызове без переданного lst функция берёт ссылку на тот самый объект. lst.append мутирует его — изменение видно всем последующим вызовам.

Когда возникает

Ловушка срабатывает для любых mutable default:

  • def f(x, items=[])
  • def f(x, cfg={})
  • def f(x, seen=set())
  • def f(x, ts=datetime.now()) — здесь "ловушка" другая: datetime.now() вычисляется один раз и навсегда.

Безопасный паттерн

def f(x, lst=None):
    if lst is None:
        lst = []
    lst.append(x)
    return lst

print(f(1))    # [1]
print(f(2))    # [2]
print(f(3))    # [3]

Sentinel-вариант, когда None — валидное значение:

_MISSING = object()

def f(x, lst=_MISSING):
    if lst is _MISSING:
        lst = []
    lst.append(x)
    return lst

В dataclass и pydantic

from dataclasses import dataclass, field

@dataclass
class Cart:
    items: list = field(default_factory=list)
    # items: list = []     # ValueError при импорте

В pydantic v2 — то же через Field(default_factory=list).

Когда mutable default используют намеренно

Очень редко — как функция-кеш:

def expensive(arg, _cache={}):
    if arg not in _cache:
        _cache[arg] = compute(arg)
    return _cache[arg]

Работает, но functools.lru_cache читается лучше и поддерживает TTL/maxsize.

Подводные камни

  • Mutable default между вызовами — баг, который проявляется только при многократном вызове или в long-running процессе.
  • В тестах monkeypatch не помогает — default уже захвачен в __defaults__.
  • datetime.now() / uuid4() / os.environ["X"] в default — фиксируется на импорте, потом «не меняется».
  • В @dataclass mutable-default запрещён напрямую (ValueError) — забывать field(default_factory=...).
  • Линтер ruff B006 ловит mutable default — включите в CI.

Частые вопросы на собеседовании

  • Что такое truthy и falsy значения в Python?
  • Когда использовать threading?
  • Что такое type hints и зачем они нужны?
  • Как работает yield?

Типичные ошибки

  • Говорить, что список создаётся при каждом вызове.
  • Исправлять через lst=[] внутри сигнатуры другой функции.
  • Не связывать поведение с defaults.

Что проверяет интервьюер

  • Предсказывает точный вывод двух вызовов.
  • Объясняет момент вычисления default arguments.
  • Показывает safe-паттерн через None или sentinel.

Как вы знаете этот вопрос?

Проверить себя по теме Python →

Источники

  • https://docs.python.org/3/library/functions.html
  • https://docs.python.org/3/reference/datamodel.html

Связанные темы

PythonDebuggingfunctions