Русский
Открыть в Telegram

Пост ✈️Сегодня поговорим о настоящей магии в мире Python – метапрограммировании и динамическом создании функций.

2 декабря 2024
P
Pythoner
Фотография
✈️Сегодня поговорим о настоящей магии в мире Python – метапрограммировании и динамическом создании функций. ➡️Начнем с простого примера. Помните eval() и exec()? Это базовые инструменты метапрограммирования, но использовать их нужно с осторожностью – как острый нож в руках повара. Гораздо интереснее копнуть глубже! def create_power_function(power): def power_func(x): return x ** power return power_func # Создаём функции на лету square = create_power_function(2) cube = create_power_function(3) ⬆️Но это только верхушка айсберга! Настоящее веселье начинается, когда мы подключаем модуль types и функцию exec с собственным словарем namespace. Это как собирать конструктор, только вместо деталей – части функции. 🔎А вы знали, что можно создавать функции с динамическим количеством аргументов? Или генерировать методы классов на лету? Это как будто у вас есть 3D-принтер для кода! import types def create_dynamic_function(func_name, args, body): namespace = {} func_code = f"def {func_name}({', '.join(args)}):\n{body}" exec(func_code, globals(), namespace) return namespace[func_name] # Магия в действии greet = create_dynamic_function( "greet", ["name"], " return f'Привет, {name}!'" ) ➡️Но помните – с большой силой приходит большая ответственность! Метапрограммирование может сделать код сложным для понимания. Используйте его мудро, когда выгода очевидна: —При создании API с повторяющимися паттернами —Для автоматизации рутинных задач —При разработке фреймворков и библиотек ➡️Отдельного внимания заслуживают декораторы – это ведь тоже метапрограммирование! Они как умные обёртки для функций, которые могут изменять их поведение. И да, их тоже можно создавать динамически! 🐍Pythoner
29 · 2.1K ·

Рядом в ленте

PPythoner✈️Сегодня поговорим о крутой фиче Python, которая может значительно сократить потребление памяти вашими объектами. Речь пойдёт об атрибуте slots! ➡️Для начала дPPythoner✈️Конструкция if __name__ == '__main__' используется для того, чтобы определить, запущен ли файл модуля напрямую или импортирован из другого модуля. ➡️Простой п
это сообщение
PPythoner✈️Сегодня поговорим о том, как сделать работу с путями в Python более элегантной и современной. Если вы всё ещё используете os.path, то пора двигаться вперёд! ➡PPythoner✈️Humanize — это библиотека для Python, которая помогает преобразовывать текстовые представления чисел, дат и других значений в более удобочитаемый человекообра

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем