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

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

❗️Канал регулярно очищується від неактивних підписників❗️
Download Telegram
Вычисление Города, Региона, Страны по IP 🤔

В Python есть библиотека ip2geotools, с ее помощью можно узнать данные местоположения.

Перед запуском кода установите библиотеку:
pip install ip2geotools

Код:
from ip2geotools.databases.noncommercial import DbIpCity

ip = 'сюда IP'

response = DbIpCity.get(ip, api_key='free')

print(f'Город - {response.city}\n'
f'Регион - {response.region}\n'
f'Страна - {response.country}\n'
f'Долгота - {response.latitude}\n'
f'Широта - {response.longitude}')

#ip2geotools
Продолжаем тему отладки

Запуск из скрипта
(второй способ)
Вы можете задать контрольные точки в коде, что позволит изучить значения переменных и другие параметры в конкретный момент выполнения программы. Это возможно при помощи метода pdb.set_trace(). Вот пример:

import pdb

def make_prog():
pdb.set_trace()
return "Python nation"

print(make_prog())

Попробуйте запустить этот код. Отладчик откроется сразу после запуска скрипта. Теперь пришло время вспомнить команды отладчика.

🔸c: продолжить выполнение программы
🔸w: отобразить окружение текущей исполняемой инструкции
🔸a: отобразить список аргументов текущей функции
🔸s: исполнить текущую строчку кода и остановиться по возможности
🔸n: продолжить исполнение программы пока не будет достигнута следующая строка текущей функции или пока функция не завершит свою работу.

#отладка #pdb
Определение страны и оператора по номеру телефона

phonenumbers - один из модулей, который предоставляет множество функций, таких как предоставление базовой информации о номере телефона, проверка номера телефона и т. д.

В этом посте мы рассмотрели лишь парочку функций.
Перед запуском установите пакет:

pip install phonenumbers

#phonenumbers
Сканирование QR-кода с помощью камеры

Несколькими постами раньше мы научились генерировать QR-код.
Теперь пришло время научится считывать его.

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

pip3 install opencv-python

После того как ваш программный код начнет "скрипеть колесами" включится веб-камера и вы, в свою очередь, поднесите QR-код к камере которая будет считывать информацию.

#opencv
Reduce весьма полезная функция для выполнения вычислений на списке и возвращения единственного результата. Она сворачивает список, применяя полученную в качестве аргумента функцию по очереди к последовательным парам элементов.
Например, если мы хотим посчитать произведение всех элементов списка чисел. Пример на картинке👆

#reduce
FuzzyWuzzy - топовая библиотека для нечёткого сравнения строк.
Например, если сравнить две строчки hello и hell, то окажется что они на 89% похожи.

Также в библиотеке есть частичное сравнение и сравнение слов без учета их позиций в предложении.

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

pip install fuzzywuzzy[speedup]
Метод get() для словаря

Часто разработчики используют квадратные скобки, чтобы получить значение из словаря. Но когда нужно получить значение из словаря безопасным способом рекомендуется использовать метод get().

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

Чтобы избежать подобной ситуации, используется метод get(). Этот метод возвращает значение для данного ключа, если оно есть в словаре. Если нет, то он вернет None (если get() используется только с одним аргументом).

Также вместо None можно получить своё значение указав его вторым аргументом в методе get().

#get() #словарь #None #KeyError
Один из лучших способов ускорения кода — это встроенные функции Python. Их нужно использовать при любой возможности. Эти встроенные функции хорошо протестированы и оптимизированы.

Почему они такие быстрые? Потому что реализованы на языке C. Это относится к таким встроенным функциям Python, как min, max, all, map и другим.

Поэтому в целях более быстрого выполнения кода стоит отдать предпочтение им, а не писать функции вручную.
Многопроцессорная обработка

Если ваш компьютер выполняет более одного процесса, тогда присмотритесь к многопроцессорной обработке в Python.
Она разрешает распараллеливание в коде. Многопроцессорная обработка весьма затратна, поскольку вам придется инициировать новые процессы, обращаться к общей памяти и т.д., поэтому пользуйтесь ей только для большого количества разделяемых данных. Для небольших объемов данных многопроцессорная обработка не всегда оправдана.
Правильный импорт

Следует избегать импорта ненужных модулей и библиотек до тех пор, пока они действительно не понадобятся. Лучше указать имя модуля вместо того, чтобы импортировать полную библиотеку.

Импорт ненужных библиотек приведет к замедлению скорости запуска программы.
dims в качестве переменных

В большинстве языков, чтобы получить набор переменных в массиве, нужно или последовательно в цикле перебирать значения массива, или обращаться к dims по позиции следующим образом:

firstdim = array[1]

В Python существует куда более классный и быстрый способ чтобы превратить список значений в переменные, просто задайте имена переменных равными массиву той же длины.
Умная распаковка

Итеративная распаковка значений может быть довольно трудоёмкой и времязатратной. К счастью, у Python есть несколько замечательных способов распаковки списков! Одним из них является звездочка *, заполняющая не определённые значения и добавляющая их к списку под именем переменной.
Python позволяет вам возвращать из функции несколько значений.

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

Еще несколько значений можно возвращать, перечислив их через запятую после команды return.
Ключевое слово 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__.