Управление тем, что может быть импортировано из модуля, а что — нет
В некоторых языках имеются предельно чёткие механизмы экспорта из модулей переменных, методов, интерфейсов. Например — в Golang экспортируются лишь сущности, имена которых начинаются с большой буквы. В Python же экспортируется всё. Но лишь до тех пор, пока не используется атрибут all
Подписывайтесь на канал 👉@pythonofff
В некоторых языках имеются предельно чёткие механизмы экспорта из модулей переменных, методов, интерфейсов. Например — в Golang экспортируются лишь сущности, имена которых начинаются с большой буквы. В Python же экспортируется всё. Но лишь до тех пор, пока не используется атрибут all
Подписывайтесь на канал 👉@pythonofff
👍2
Создаем словарь из набора ключей
Для создания словаря из известного набора ключей и одинаковых значений часто используют генераторы словарей (dict comprehensions).
Однако класс dict имеет удобный метод fromkeys, который был создан специально для таких случаев.
Подписывайтесь на канал 👉@pythonofff
Для создания словаря из известного набора ключей и одинаковых значений часто используют генераторы словарей (dict comprehensions).
Однако класс dict имеет удобный метод fromkeys, который был создан специально для таких случаев.
Подписывайтесь на канал 👉@pythonofff
👍2
Экономия памяти с помощью slots
Эта функция хорошо сказывается на производительности, но, с точки зрения потребления памяти, это неэффективно. Обычно, правда, проблем эта особенность не вызывает. Однако если вы столкнулись в подобной ситуации с нехваткой памяти — можете попробовать воспользоваться атрибутом slots
Подписывайтесь на канал 👉@pythonofff
Эта функция хорошо сказывается на производительности, но, с точки зрения потребления памяти, это неэффективно. Обычно, правда, проблем эта особенность не вызывает. Однако если вы столкнулись в подобной ситуации с нехваткой памяти — можете попробовать воспользоваться атрибутом slots
Подписывайтесь на канал 👉@pythonofff
👍3❤1
Пакеты
Пакет — это, грубо говоря, папка с Python модулями. Помимо разделения проекта по частям, пакеты нужны для создания пространства имен, чтобы работать с модулями через точку, как в примере на картинке.
При импорте from package import * будут подключены либо все модули и объекты модуля __init__.py, либо то, что находится в переменной __all__ в том же модуле __init__.py.
Еще примечателен файл __init__.py, который раньше был обязателен для создания пакетов. Но с версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
Подписывайтесь на канал 👉@pythonofff
Пакет — это, грубо говоря, папка с Python модулями. Помимо разделения проекта по частям, пакеты нужны для создания пространства имен, чтобы работать с модулями через точку, как в примере на картинке.
При импорте from package import * будут подключены либо все модули и объекты модуля __init__.py, либо то, что находится в переменной __all__ в том же модуле __init__.py.
Еще примечателен файл __init__.py, который раньше был обязателен для создания пакетов. Но с версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
Подписывайтесь на канал 👉@pythonofff
❤5👍2
Оператор объединения словарей
В Python есть много разных способов объединить несколько словарей. Мне, например, больше всего нравилась распаковка словарей в один новый.
Но в одном из последних обновлений добавили специальный оператор |, с помощью которого можно это делать ещё проще.
Подписывайтесь на канал 👉@pythonofff
В Python есть много разных способов объединить несколько словарей. Мне, например, больше всего нравилась распаковка словарей в один новый.
Но в одном из последних обновлений добавили специальный оператор |, с помощью которого можно это делать ещё проще.
Подписывайтесь на канал 👉@pythonofff
👍2
Итерация по Списку в Python С Помощью Метода Enumerate
Если вы не знаете, что именно enumerate делает в python, то позвольте мне объяснить вам.Метод enumerate() добавляет счетчик к итерируемому объекту и возвращает его. И что бы ни возвращал метод enumerate, это будет объект enumerate.
Основное преимущество использования метода enumerate заключается в том, что вы можете преобразовать объекты enumerate в list и tuple с помощью методов list() и tuple() соответственно.
Подписывайтесь на канал 👉@pythonofff
Если вы не знаете, что именно enumerate делает в python, то позвольте мне объяснить вам.Метод enumerate() добавляет счетчик к итерируемому объекту и возвращает его. И что бы ни возвращал метод enumerate, это будет объект enumerate.
Основное преимущество использования метода enumerate заключается в том, что вы можете преобразовать объекты enumerate в list и tuple с помощью методов list() и tuple() соответственно.
Подписывайтесь на канал 👉@pythonofff
👍2
Вызов программ операционной системы
sh — это полноценный интерфейс, как альтернатива subprocess, который позволяет вызывать любую программу, как если бы это была обычная функция.
Все запускаемые команды импортируются, как обычные функции, но функциями не являются, а лишь динамически обращаются к командам системы. Таким образом мы можем по сути обратиться к любой программе в системе.
sh полагается на системные вызовы Unix и работает только в Unix-подобных операционных системах, т.е. данный модуль не подойдет для работы с Windows.
Для обращения к командам программы и передать набор аргументов команды, мы можем передать их как обычные аргументы функции.
Также в модуле реализована функция which, которая находит полный путь до программы либо возвращает None, если программа не найдена.
Подписывайтесь на канал 👉@pythonofff
sh — это полноценный интерфейс, как альтернатива subprocess, который позволяет вызывать любую программу, как если бы это была обычная функция.
Все запускаемые команды импортируются, как обычные функции, но функциями не являются, а лишь динамически обращаются к командам системы. Таким образом мы можем по сути обратиться к любой программе в системе.
sh полагается на системные вызовы Unix и работает только в Unix-подобных операционных системах, т.е. данный модуль не подойдет для работы с Windows.
Для обращения к командам программы и передать набор аргументов команды, мы можем передать их как обычные аргументы функции.
Также в модуле реализована функция which, которая находит полный путь до программы либо возвращает None, если программа не найдена.
Подписывайтесь на канал 👉@pythonofff
👍1
Находим схожие строки
В стандартной библиотеке Python существует модуль difflib, в котором есть интересный метод get_close_matches. Он позволяет найти в списке строки, похожие на некую исходную.
Этот метод ищет "наилучшие" возможные совпадения. Первый аргумент задаёт искомую строку, второй аргумент — список, в котором выполняется поиск.
Также в метод можно передать необязательный аргумент n, который задаёт максимальное число возвращаемых совпадений.
Подписывайтесь на канал 👉@pythonofff
В стандартной библиотеке Python существует модуль difflib, в котором есть интересный метод get_close_matches. Он позволяет найти в списке строки, похожие на некую исходную.
Этот метод ищет "наилучшие" возможные совпадения. Первый аргумент задаёт искомую строку, второй аргумент — список, в котором выполняется поиск.
Также в метод можно передать необязательный аргумент n, который задаёт максимальное число возвращаемых совпадений.
Подписывайтесь на канал 👉@pythonofff
👍4
Аргументы и параметры командной строки
Для обработки передаваемых аргументов и создания удобный интерфейс командной строки в python есть отличный модуль argparse.
Для начала нам нужно создать объект парсера ArgumentParser, в который мы уже сможем добавить аргументы с нужными параметрами с помощью метода add_argument.
Первым параметром add_argument принимает либо имя обязательного позиционного аргумента, либо список опционального аргумента (опциональный аргумент идентифицируется через -). Также у add_argument есть множество необязательных опциональных параметров для работы с передаваемым значением аргумента.
После добавления всех аргументов, нам нужно их спарсить с помощью метода parse_args, на выходе мы получим объект со всеми содержащимися аргументами.
Подписывайтесь на канал 👉@pythonofff
Для обработки передаваемых аргументов и создания удобный интерфейс командной строки в python есть отличный модуль argparse.
Для начала нам нужно создать объект парсера ArgumentParser, в который мы уже сможем добавить аргументы с нужными параметрами с помощью метода add_argument.
Первым параметром add_argument принимает либо имя обязательного позиционного аргумента, либо список опционального аргумента (опциональный аргумент идентифицируется через -). Также у add_argument есть множество необязательных опциональных параметров для работы с передаваемым значением аргумента.
После добавления всех аргументов, нам нужно их спарсить с помощью метода parse_args, на выходе мы получим объект со всеми содержащимися аргументами.
Подписывайтесь на канал 👉@pythonofff
❤2
Редактируем видео
Пакет
В целом, с пакетом разбораться не сложно, базовое использование показано на картинке. В примере мы открываем два видео, склеиваем их в одно, обрезаем полученный клип, уменьшаем громкость звука и в конце сохраняем результат.
Здесь еще важно отметить, что запуск и выполнение скриптов с обработкой видео может занять относительно большое время.
Такой пакет полезен в случаях, когда требуется обработать очень много видео по одному и тому же принципу.
Подписывайтесь на канал 👉@pythonofff
Пакет
moviepy позволяет обрезать и склеивать видео, добавлять видеоэффекты, а также редактировать звук. В целом, с пакетом разбораться не сложно, базовое использование показано на картинке. В примере мы открываем два видео, склеиваем их в одно, обрезаем полученный клип, уменьшаем громкость звука и в конце сохраняем результат.
Здесь еще важно отметить, что запуск и выполнение скриптов с обработкой видео может занять относительно большое время.
Такой пакет полезен в случаях, когда требуется обработать очень много видео по одному и тому же принципу.
Подписывайтесь на канал 👉@pythonofff
❤1👍1
Извлечение аудио из видеофайлов
Бывает так, что у нас есть mp4-файл, но нам нужна только звуковая дорожка из него. Скажем, чтобы сделать другое видео с таким же звуковым сопровождением. Эта проблема решается установкой библиотеки moviepy.
Подписывайтесь на канал 👉@pythonofff
Бывает так, что у нас есть mp4-файл, но нам нужна только звуковая дорожка из него. Скажем, чтобы сделать другое видео с таким же звуковым сопровождением. Эта проблема решается установкой библиотеки moviepy.
Подписывайтесь на канал 👉@pythonofff
👍3❤1
Методы у словарей
В этом посте поговорим про 3 простых метода у словарей, которые позволяет получить элементы в разном виде.
С помощью метода dict.keys() можно получить ключи словаря в виде списка, dict.values() — то же самое, но со значениями.
А метод dict.items() возвращает список из кортежей, которые содержат ключи и соответствующие значения.
Подписывайтесь на канал 👉@pythonofff
В этом посте поговорим про 3 простых метода у словарей, которые позволяет получить элементы в разном виде.
С помощью метода dict.keys() можно получить ключи словаря в виде списка, dict.values() — то же самое, но со значениями.
А метод dict.items() возвращает список из кортежей, которые содержат ключи и соответствующие значения.
Подписывайтесь на канал 👉@pythonofff
👍3❤1
🚀 Подборка Telegram каналов для программистов
Системное администрирование, DevOps 📌
https://xn--r1a.website/bash_srv Bash Советы
https://xn--r1a.website/win_sysadmin Системный Администратор Windows
https://xn--r1a.website/sysadmin_girl Девочка Сисадмин
https://xn--r1a.website/srv_admin_linux Админские угодья
https://xn--r1a.website/linux_srv Типичный Сисадмин
https://xn--r1a.website/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://xn--r1a.website/linux_odmin Linux: Системный администратор
https://xn--r1a.website/devops_star DevOps Star (Звезда Девопса)
https://xn--r1a.website/i_linux Системный администратор
https://xn--r1a.website/linuxchmod Linux
https://xn--r1a.website/sys_adminos Системный Администратор
https://xn--r1a.website/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://xn--r1a.website/sysadminof Книги для админов, полезные материалы
https://xn--r1a.website/i_odmin Все для системного администратора
https://xn--r1a.website/i_odmin_book Библиотека Системного Администратора
https://xn--r1a.website/i_odmin_chat Чат системных администраторов
https://xn--r1a.website/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://xn--r1a.website/sysadminoff Новости Линукс Linux
1C разработка 📌
https://xn--r1a.website/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://xn--r1a.website/DevLab1C 1С:Предприятие 8
https://xn--r1a.website/razrab_1C 1C Разработчик
https://xn--r1a.website/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://xn--r1a.website/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://xn--r1a.website/cpp_lib Библиотека C/C++ разработчика
https://xn--r1a.website/cpp_knigi Книги для программистов C/C++
https://xn--r1a.website/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://xn--r1a.website/pythonofff Python академия.
https://xn--r1a.website/BookPython Библиотека Python разработчика
https://xn--r1a.website/python_real Python подборки на русском и английском
https://xn--r1a.website/python_360 Книги по Python
Java разработка 📌
https://xn--r1a.website/BookJava Библиотека Java разработчика
https://xn--r1a.website/java_360 Книги по Java Rus
https://xn--r1a.website/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://xn--r1a.website/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://xn--r1a.website/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://xn--r1a.website/developer_mobila Мобильная разработка
https://xn--r1a.website/kotlin_lib Подборки полезного материала по Kotlin
https://xn--r1a.website/androidspb Разработка под Android: Kotlin, Java.
Фронтенд разработка 📌
https://xn--r1a.website/frontend_1 Подборки для frontend разработчиков
https://xn--r1a.website/frontend_sovet Frontend советы, примеры и практика!
https://xn--r1a.website/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://xn--r1a.website/game_devv Все о разработке игр
Библиотеки 📌
https://xn--r1a.website/book_for_dev Книги для программистов Rus
https://xn--r1a.website/programmist_of Книги по программированию
https://xn--r1a.website/proglb Библиотека программиста
https://xn--r1a.website/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://xn--r1a.website/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://xn--r1a.website/bookflow Лекции, видеоуроки, доклады с IT конференций
https://xn--r1a.website/rust_lib Полезный контент по программированию на Rust
https://xn--r1a.website/golang_lib Библиотека Go (Golang) разработчика
https://xn--r1a.website/itmozg Программисты, дизайнеры, новости из мира IT
https://xn--r1a.website/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://xn--r1a.website/nodejs_lib Подборки по Node js и все что с ним связано
https://xn--r1a.website/ruby_lib Библиотека Ruby программиста
https://xn--r1a.website/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://xn--r1a.website/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://xn--r1a.website/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://xn--r1a.website/thehaking Канал о кибербезопасности
https://xn--r1a.website/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://xn--r1a.website/ux_web Статьи, книги для дизайнеров
Математика 📌
https://xn--r1a.website/Pomatematike Канал по математике
https://xn--r1a.website/phis_mat Обучающие видео, книги по Физике и Математике
https://xn--r1a.website/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://xn--r1a.website/Excel_lifehack
https://xn--r1a.website/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://xn--r1a.website/sysadmin_rabota Системный Администратор
https://xn--r1a.website/progjob Вакансии в IT
Системное администрирование, DevOps 📌
https://xn--r1a.website/bash_srv Bash Советы
https://xn--r1a.website/win_sysadmin Системный Администратор Windows
https://xn--r1a.website/sysadmin_girl Девочка Сисадмин
https://xn--r1a.website/srv_admin_linux Админские угодья
https://xn--r1a.website/linux_srv Типичный Сисадмин
https://xn--r1a.website/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://xn--r1a.website/linux_odmin Linux: Системный администратор
https://xn--r1a.website/devops_star DevOps Star (Звезда Девопса)
https://xn--r1a.website/i_linux Системный администратор
https://xn--r1a.website/linuxchmod Linux
https://xn--r1a.website/sys_adminos Системный Администратор
https://xn--r1a.website/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://xn--r1a.website/sysadminof Книги для админов, полезные материалы
https://xn--r1a.website/i_odmin Все для системного администратора
https://xn--r1a.website/i_odmin_book Библиотека Системного Администратора
https://xn--r1a.website/i_odmin_chat Чат системных администраторов
https://xn--r1a.website/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://xn--r1a.website/sysadminoff Новости Линукс Linux
1C разработка 📌
https://xn--r1a.website/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://xn--r1a.website/DevLab1C 1С:Предприятие 8
https://xn--r1a.website/razrab_1C 1C Разработчик
https://xn--r1a.website/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://xn--r1a.website/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://xn--r1a.website/cpp_lib Библиотека C/C++ разработчика
https://xn--r1a.website/cpp_knigi Книги для программистов C/C++
https://xn--r1a.website/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://xn--r1a.website/pythonofff Python академия.
https://xn--r1a.website/BookPython Библиотека Python разработчика
https://xn--r1a.website/python_real Python подборки на русском и английском
https://xn--r1a.website/python_360 Книги по Python
Java разработка 📌
https://xn--r1a.website/BookJava Библиотека Java разработчика
https://xn--r1a.website/java_360 Книги по Java Rus
https://xn--r1a.website/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://xn--r1a.website/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://xn--r1a.website/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://xn--r1a.website/developer_mobila Мобильная разработка
https://xn--r1a.website/kotlin_lib Подборки полезного материала по Kotlin
https://xn--r1a.website/androidspb Разработка под Android: Kotlin, Java.
Фронтенд разработка 📌
https://xn--r1a.website/frontend_1 Подборки для frontend разработчиков
https://xn--r1a.website/frontend_sovet Frontend советы, примеры и практика!
https://xn--r1a.website/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://xn--r1a.website/game_devv Все о разработке игр
Библиотеки 📌
https://xn--r1a.website/book_for_dev Книги для программистов Rus
https://xn--r1a.website/programmist_of Книги по программированию
https://xn--r1a.website/proglb Библиотека программиста
https://xn--r1a.website/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://xn--r1a.website/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://xn--r1a.website/bookflow Лекции, видеоуроки, доклады с IT конференций
https://xn--r1a.website/rust_lib Полезный контент по программированию на Rust
https://xn--r1a.website/golang_lib Библиотека Go (Golang) разработчика
https://xn--r1a.website/itmozg Программисты, дизайнеры, новости из мира IT
https://xn--r1a.website/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://xn--r1a.website/nodejs_lib Подборки по Node js и все что с ним связано
https://xn--r1a.website/ruby_lib Библиотека Ruby программиста
https://xn--r1a.website/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://xn--r1a.website/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://xn--r1a.website/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://xn--r1a.website/thehaking Канал о кибербезопасности
https://xn--r1a.website/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://xn--r1a.website/ux_web Статьи, книги для дизайнеров
Математика 📌
https://xn--r1a.website/Pomatematike Канал по математике
https://xn--r1a.website/phis_mat Обучающие видео, книги по Физике и Математике
https://xn--r1a.website/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://xn--r1a.website/Excel_lifehack
https://xn--r1a.website/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://xn--r1a.website/sysadmin_rabota Системный Администратор
https://xn--r1a.website/progjob Вакансии в IT
Telegram
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
По всем вопросам @evgenycarter
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
По всем вопросам @evgenycarter
Поиск в Google без открытия браузера
Порой мы так глубоко погружаемся в написание кода, что нам неохота открывать браузер для поиска нужной информации. Установив потрясающую библиотеку google, можно делать запрос в поисковик прямо в консоли.
Подписывайтесь на канал 👉@pythonofff
Порой мы так глубоко погружаемся в написание кода, что нам неохота открывать браузер для поиска нужной информации. Установив потрясающую библиотеку google, можно делать запрос в поисковик прямо в консоли.
Подписывайтесь на канал 👉@pythonofff
👍2
3 интересных функции в random
Этот пост более для тех, у кого есть соответствующий бэкграунд и кто хочет знать про random больше среднего.
betavariate() — используется для получения случайного числа с плавающей запятой от 0 до 1 на основе бета-распределения (применяется для статистических расчетов).
gauss() — генерирует случайное число с плавающей запятой на основе распределения Гаусса (используется в теории вероятности).
paretovariate() — возвращает случайное число с плавающей запятой на основе распределения Парето (используется в теории вероятности).
Подписывайтесь на канал 👉@pythonofff
Этот пост более для тех, у кого есть соответствующий бэкграунд и кто хочет знать про random больше среднего.
betavariate() — используется для получения случайного числа с плавающей запятой от 0 до 1 на основе бета-распределения (применяется для статистических расчетов).
gauss() — генерирует случайное число с плавающей запятой на основе распределения Гаусса (используется в теории вероятности).
paretovariate() — возвращает случайное число с плавающей запятой на основе распределения Парето (используется в теории вероятности).
Подписывайтесь на канал 👉@pythonofff
❤1
Создаем бесконечный итератор
Функция cycle() из itertools принимает на вход итерируемый объект и создает бесконечный итератор, циклически возвращающий элементы данного объекта.
Фишка заключается в том, что когда элементы последовательности заканчиваются, итерация начинается вновь с первого элемента.
Но если вы проходитесь циклом по такому итератору, то важно предусмотреть выход из цикла, иначе он станет бесконечным (как у нас в первом случае на картинке).
Мы также можем воспользоваться islice(), который вернет итератор по подмножеству переданного объекта.
Подписывайтесь на канал 👉@pythonofff
Функция cycle() из itertools принимает на вход итерируемый объект и создает бесконечный итератор, циклически возвращающий элементы данного объекта.
Фишка заключается в том, что когда элементы последовательности заканчиваются, итерация начинается вновь с первого элемента.
Но если вы проходитесь циклом по такому итератору, то важно предусмотреть выход из цикла, иначе он станет бесконечным (как у нас в первом случае на картинке).
Мы также можем воспользоваться islice(), который вернет итератор по подмножеству переданного объекта.
Подписывайтесь на канал 👉@pythonofff
👍2
Получаем список переменных
Функция locals() возвращает словарь переменных из текущего пространства имён. Ключи словаря — названия переменных, а значения — это их значения.
С помощью похожей функции globals() можно получить все переменные конкретного модуля в таком же виде.
Еще обратите внимание на результат второй функции: там много разных переменных, которые мы явно не объявляли — про некоторые из них скоро расскажем.
Подписывайтесь на канал 👉@pythonofff
Функция locals() возвращает словарь переменных из текущего пространства имён. Ключи словаря — названия переменных, а значения — это их значения.
С помощью похожей функции globals() можно получить все переменные конкретного модуля в таком же виде.
Еще обратите внимание на результат второй функции: там много разных переменных, которые мы явно не объявляли — про некоторые из них скоро расскажем.
Подписывайтесь на канал 👉@pythonofff
👍2❤1
Дизассемблирование
При запуске программы на python, написанный код преобразуется в байт-код, который затем может быть запущен в интерпретаторе Python. Встроенный модуль dis позволяет дизассемблировать байт-код в удобное представление для просмотра его инструкций. Полный спсиок инструкций байт-кода с описанием можно посмотреть здесь.
На картинке показана работа этого модуля на примере функции, но такое можно повторить и с классами – в таком случае все его функции будут дизассемблированы.
Подписывайтесь на канал 👉@pythonofff
При запуске программы на python, написанный код преобразуется в байт-код, который затем может быть запущен в интерпретаторе Python. Встроенный модуль dis позволяет дизассемблировать байт-код в удобное представление для просмотра его инструкций. Полный спсиок инструкций байт-кода с описанием можно посмотреть здесь.
На картинке показана работа этого модуля на примере функции, но такое можно повторить и с классами – в таком случае все его функции будут дизассемблированы.
Подписывайтесь на канал 👉@pythonofff
👍2
Шаблоны строк для форматирования
Класс Template из пакета string в стандартной библиотеке позволяет вполне удобно создавать шаблоны строк для дальнейшего форматирования.
Такой способ появился ещё в Python 2.4, как замена %-форматированию, но популярным так и не стал. Он поддерживает передачу значений по имени и использует $-синтаксис как в PHP.
В новых проектах, конечно, используются чаще всего f-строки и иногда метод format, но всё же о Template стоит хотя бы знать на случай, если придется работать с легаси кодом.
Подписывайтесь на канал 👉@pythonofff
Класс Template из пакета string в стандартной библиотеке позволяет вполне удобно создавать шаблоны строк для дальнейшего форматирования.
Такой способ появился ещё в Python 2.4, как замена %-форматированию, но популярным так и не стал. Он поддерживает передачу значений по имени и использует $-синтаксис как в PHP.
В новых проектах, конечно, используются чаще всего f-строки и иногда метод format, но всё же о Template стоит хотя бы знать на случай, если придется работать с легаси кодом.
Подписывайтесь на канал 👉@pythonofff
👍4❤2
Копируем объекты
При присваивании переменной значения другой переменной, как правило, новый объект не создается, а копируется ссылка уже на существующий.
Если использовать функцию copy из стандартной библиотеки, то новый объект будет создан, но его ссылки на другие объекты останутся такими же.
В случае с deepcopy произойдет рекурсивное копирование. Например, при таком копировании списка все его элементы также скопируются как новые объекты.
Подписывайтесь на канал 👉@pythonofff
При присваивании переменной значения другой переменной, как правило, новый объект не создается, а копируется ссылка уже на существующий.
Если использовать функцию copy из стандартной библиотеки, то новый объект будет создан, но его ссылки на другие объекты останутся такими же.
В случае с deepcopy произойдет рекурсивное копирование. Например, при таком копировании списка все его элементы также скопируются как новые объекты.
Подписывайтесь на канал 👉@pythonofff
👍5