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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python16 845
  • Облачные технологии13 177
  • QA вакансии3 434
  • Backend вакансии2 084
  • Инженер данных1 685
  • Продакт-менеджер1 179

Разработка

  • Android1 845
  • iOS1 689
  • Fullstack вакансии960
  • AI вакансии950
  • Frontend вакансии736
  • Mobile вакансии44

По стеку

  • Go8 619
  • Java6 379
  • Node.js1 971
  • .NET1 640
  • Kotlin1 599
  • Rust1 443
  • PHP670
  • C#650
  • C++536

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

  • Kubernetes7 304
  • DevOps вакансии5 865
  • Linux-инфраструктура5 290
  • Terraform / IaC4 016
  • CI/CD2 991
  • Мониторинг и Observability1 734
  • SRE550
  • Кибербезопасность413

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

  • Data Scientist1 054
  • Бизнес-аналитик868
  • Аналитик данных834
  • Системный аналитик134

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

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

По регионам

  • Вакансии в США45 360
  • Вакансии в Европе22 405
  • Вакансии в Канаде4 485
  • Работа в России3 897

По формату

  • Удалённые вакансии75 381
  • Релокация в США45 357
  • Гибридная работа12 010
  • Офисная работа7 029

По уровню

  • Senior вакансии42 335
  • Middle вакансии20 999
  • Junior вакансии6 760

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

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab139 вакансий
  • Celonis40 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

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

Что такое first-class functions в Python? Что это даёт на практике?

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

Функции в Python — объекты первого класса: их можно присваивать переменным, передавать аргументами, возвращать из функций и хранить в коллекциях. У них есть атрибуты (__name__, __doc__, __annotations__). Базис для callback-ов, декораторов, dependency injection.

Пример

from functools import partial, reduce


def by_length(value: str) -> int:
    return len(value)


def apply(func, value):
    return func(value)


names = ["Ada", "Guido", "Linus"]
print(sorted(names, key=by_length))   # ['Ada', 'Guido', 'Linus']
print(apply(str.upper, "python"))     # PYTHON


# Атрибуты функции
print(by_length.__name__)             # by_length
print(by_length.__annotations__)      # {'value': <class 'str'>, 'return': <class 'int'>}
by_length.cache_hits = 0              # повесить свой атрибут
print(by_length.cache_hits)


# Словарь команд — strategy pattern на функциях
def cmd_ping(args): return "pong"
def cmd_echo(args): return " ".join(args)

COMMANDS = {"ping": cmd_ping, "echo": cmd_echo}
print(COMMANDS["echo"](["hello", "world"]))  # hello world


# partial — фиксируем аргумент
log_error = partial(print, "[ERROR]")
log_error("disk full")  # [ERROR] disk full


# reduce — высокоуровневая агрегация
print(reduce(lambda a, b: a * b, [1, 2, 3, 4]))  # 24


# Декоратор как пример возврата функции
def trace(fn):
    def wrapper(*args, **kwargs):
        print(f"call {fn.__name__}({args}, {kwargs})")
        return fn(*args, **kwargs)
    return wrapper


@trace
def add(a, b): return a + b


add(1, 2)

Что это значит

«First-class» означает, что функции — обычные объекты типа function (или builtin_function_or_method). С ними можно делать всё, что с любым другим объектом:

  • Присваивать переменным: f = process — ссылка, не вызов.
  • Передавать аргументами: sorted(items, key=str.lower).
  • Возвращать из других функций (closures, decorators, фабрики).
  • Хранить в коллекциях: handlers = {"GET": handle_get, "POST": handle_post}.
  • Сравнивать по identity, передавать через очередь, сериализовать (через pickle — с ограничениями).

Каждая функция имеет атрибуты: __name__, __qualname__, __module__, __doc__, __annotations__, __code__, __defaults__, __closure__, __dict__. На них можно вешать кастомные атрибуты (используют декораторы).

Практические применения

  • Higher-order functions: map, filter, sorted(..., key=...), functools.reduce.
  • Декораторы: функция, принимающая функцию и возвращающая обёртку.
  • Callbacks: signal handlers, GUI events, ARQ/Celery tasks.
  • Strategy pattern: словарь имени → реализация вместо if/elif лестницы.
  • Dependency injection: передавайте функции вместо классов, когда не нужно состояние.
  • Partial application: functools.partial(fn, x=1) создаёт новую callable с зафиксированными аргументами.

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

  • Путать fn (ссылка) и fn() (вызов) — передаёте результат вместо функции и удивляетесь падению.
  • Method bound vs unbound: obj.method — bound (содержит self); Class.method — unbound (нужно явно передать self).
  • Декоратор без functools.wraps теряет __name__/__doc__ исходной функции; ломает интроспекцию и pytest.
  • Lambda удобна на месте, но именованная функция лучше для тестов и stack traces.
  • Сохранение функции в БД/файл — пиклить можно только top-level функции; lambda/closure не сериализуются.
  • Mutable default argument — частая ловушка: def f(x, lst=[]): делит lst между вызовами.

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

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

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

  • Говорить только про lambda, не объясняя объект функции.
  • Не приводить практические сценарии.
  • Путать ссылку на функцию и вызов.

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

  • Передаёт функцию как аргумент.
  • Объясняет callbacks/decorators.
  • Понимает, что функции имеют атрибуты и identity.

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

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

Источники

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

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

Pythondecoratorsfunctional-programming