Python Nation🐍🇺🇦
2.83K subscribers
237 photos
2 files
158 links
Канал для всіх, хто вивчає Python: поради, приклади коду, бібліотеки, лайфхаки та актуальні новин👨‍💻🐍

По всім питанням👉 @giorg_jr

❗️Канал регулярно очищується від неактивних підписників❗️
Download Telegram
Ключевое слово nonlocal

Похожее по функционалу на global, ключевое слово nonlocal позволяет обращаться к переменным из нелокальной области видимости.

Поведение nonlocal заключается в том, что интерпретатор ищет переменную в ближайшей области видимости.

Основное различие с global в том, что с помощью nonlocal нельзя получить переменные из глобальной области видимости.
Все знают как делать, привычный для нас перебор, к примеру от 0 до 5

Но иногда нам нужно перебрать последовательность в обратном порядке и для этого можно использовать функцию reversed как на примере выше.

#reversed
Практически в любой программе необходимо проверять, являются ли переменные / списки / словари / ... пустыми. На этих проверках тоже можно немножко сэкономить.

Не следует явно указывать == True или is True в условии if, достаточно указать имя переменной, которая проверяется. Это экономит ресурсы, которые использует «магическая» функция __eq__ для сравнения значений.
Программист на Python может узнать, какие именно переменные определенны в данный момент в интерпретаторе. Переменные можно разделить на локальные и глобальные. Глобальные определены на верхнем уровне кода снаружи функций и классов. Локальные переменные наоборот определены внутри своих зон видимости, ограниченных классами и функциями.

Функция globals() всегда возвращает словарь глобальных переменных.

#globals()
Функция locals() возвращает словарь только локальных переменных.
Обратите внимание, что переменная y в locals() имеет другое значение, нежели чем в globals(). Это две разные переменные из разных областей, но внутри функции приоритет имеет локальная y.

Как вы уже могли заметить в список переменных входят не только простые переменные, которые вы определяете через знак присваивания, но и функции, классы, а также импортированные модули.
Друзья, у Python комьюнити 2 праздника:
1️⃣ Вышел Python 3.10. Вы уже обновили версию Python?

2️⃣ Впервые за более чем 20 лет язык программирования Python занял 1-е место в рейтинге TIOBE! 🎉 Первенство Java и C закончилось. Python, который начинался как простой язык сценариев как альтернатива Perl, стал зрелым. Простота обучения, огромное количество библиотек и широкое использование, во всех областях, сделали его самым популярным языком программирования на сегодняшний день.Поздравляем нас и в первую очередь Гвидо ван Россума.
Вы, наверное, слышали фразу "wild import - зло". В коде это выглядит так:

from my_module import *

Ответ почему это "зло" очень простой - вы импортируете всё - то что надо и то что не надо.

Как же быть? Можно поочерёдно импортировать только нужные переменные и функции/классы, но это плохая практика если у вас много импортов. Ведь должен быть альтернативный вариант.

Он есть - это переменная __all__ .__all__ в Python - это список публичных объектов данного модуля.

Например, есть некий my_module.py, в нём очень много объектов, и не требуется давать пользоваться ими всеми. В my_module.py вы списком определяете названия объектов, которые можно импортировать:

__all__ = ["MyClass", "MyClass2"]

И тогда конструкция

from my_module import *

Импортирует только те объекты, которые вы описали в __all__.
Забудьте о range(len(коллекция)). Сделайте выбор в сторону — enumerate(коллекция).

Часто возникают ситуации, когда нужно перебрать коллекцию и отслеживать индексы элементов, к которым вы получили доступ. Для этих целей многие использует range(len(коллекция)).

Функция enumerate возвращает enumerate-объект, который хранит в себе и индексы элементов, и их значения.

С помощью этой функции вы облегчите доступ и к индексам, и к значениям.

Рассмотрите пример, в котором видна разница между range(len(коллекция)) и enumerate(коллекция).
Валидаторы данных

Как правило, разработчики пишут регулярные выражения для обработки специфических строк. Но для таких данных как, почта или ссылка, изобретать велосипед не нужно.

Модуль validators позволяет использовать уже готовые валидаторы для самых распространенных задач.

Каждая функция-валидатор возвращает True при успешной проверке и ValidationFailure при неудачной проверке.

Помимо этого, validators позволяет также работать с ipv4, ipv6, uuid, iban и многим другим. В итоге, имеем лаконичный и простой модуль с хорошим функционалом.

#validators
Среди тех кто хоть как-то сталкивался с Python, бытует мнение, что всё в Python является объектом. Отчасти это так.
Но правильным утверждением является "В Python почти все является объектом."

Строки, словари, файлы и целые числа — все это объекты. Даже функции представляют собой объекты. Но есть и исключения: ключевые слова (например in ) объектами не являются. Кроме того, имена переменных объектами не являются, но указывают на них.
Глубокое (полное) копирование

Глубокая копия создает новую и отдельную копию всего объекта или списка со своим уникальным адресом памяти. Это означает, что любые изменения, внесенные вами в новую копию объекта или списка, не будут отражаться в исходной. Этот процесс происходит следующим образом: сначала создается новый список или объект, а затем рекурсивно копируются все элементы из исходного в новый.

Короче мораль такова: оба объекта становятся полностью независимы друг от друга!)

#deepcopy()
textblob - это библиотека Python для обработки текстовых данных.
Она предоставляет простой API-интерфейс для решения общих задач обработки естественного языка (NLP), таких как тегирование части речи, извлечение именных фраз, анализ тональности, классификация, перевод и многое другое.

Перед запуском кода установите пакет:
pip3 install textblob

#textblob
uuid

В Python есть библиотека с именем UUID (универсальный уникальный идентификатор) для генерации случайного объекта длиной 128 бит. Эта библиотека генерирует уникальные идентификаторы на основе системного времени и сетевого адреса компьютера.

Объект UUID неизменяем и содержит некоторые функции для создания различных уникальных идентификаторов. UUID используется для многих целей, таких как:
- создание уникального случайного идентификатора
- MAC-адреса на основе идентификатора
- криптографических значений
- хеш-функции и тд.
Друзья, кому под силу исправить код так, чтобы он корректно работал?

Напиши в комментах, что нужно прописать вместо знаков вопросов.

Давайте узнает кто самый сильный "питонодав"😂

P.S. Последовательность ключей непринципиальна!

#исправитькод
Путь Pyhon Junior-a

Этот план пригодится как начинающим, так и тем у кого уже есть небольшой опыт.
У кого какие предположения почему такой результат?

Обязательно напишите свой вариант в комментариях👇
yield from

Бытует мнение, что yield from был добавлен в Python 3, чтобы объединить две конструкции: yield и цикл for, потому что они часто используются совместно, как в примере(на картинке слева).

Однако истинное предназначение немного в другом. Конструкция позволяет «вкладывать» один генератор в другой, то есть создавать субгенераторы.

yield from позволяет программисту легко управлять сразу несколькими генераторами, настраивать их взаимодействие и, конечно, заменить более длинную конструкцию for+yield

Как видно из примера, yield from позволяет одному генератору получать значения из другого. Этот инструмент сильно упрощает жизнь программиста, особенно при асинхронном программировании.
Ключевое слово None представляет собой константу языка Python и означает отсутствие значения. В других языках программирования, например Java, вместо него используется значение null . Однако null часто вызывает путаницу, особенно у начинающих программистов, считающих, что оно равно целочисленному значению 0 . Поэтому в языке Python используется ключевое слово None , как показано в примере, чтобы четко обозначить его отличие от числового значения 0, пустого списка и пустой строки. Любопытно, что значение None — единственное значение в типе данных NoneType .

В этом коде приведено несколько примеров типа данных None (а также показано, чем он не является). Если не указать для функции возвращаемое значение, то по умолчанию будет возвращаться None .
Функция getsizeof()

Модуль sys стандартной библиотеки предоставляет функцию getsizeof(). Эта функция принимает объект (объект может быть любого типа), вызывает метод sizeof() и возвращает размер объекта в байтах, поэтому вы также можете сделать ваши объекты инспектируемыми.

Сегодня эту функцию испытаем на числах.