Python RU
13.4K subscribers
859 photos
40 videos
36 files
1.12K links
Все для python разработчиков

админ - @haarrp

@python_job_interview - Python собеседования

@ai_machinelearning_big_data - машинное обучение

@itchannels_telegram - 🔥лучшие ит-каналы

@programming_books_it - it книги

@pythonl

РКН: clck.ru/3Fmy2j
加入频道
🗾 Работаем с изображениями на Python

Сегодня мы поговорим про то, как сжать изображение в Python. Вы узнаете, как уменьшить размер файла, сжимая и изменяя размер изображения с помощью библиотеки Pillow.

Сжатие изображения — это процесс уменьшения веса картинки без ухудшения ее качества. В этой статье мы расскажем, как уменьшать размер файла изображения в Python с помощью библиотеки Pillow.

Кроме того, вы можете свободно использовать код из этого руководства. Например, вы можете создать вокруг него API для пакетного уменьшения размеров изображений вместо использования стороннего API, который будет стоить вам денег.

Мы сделали код для данного урока максимально гибким.


https://pythonist.ru/kak-szhat-izobrazhenie-v-python/

@pro_python_code
Mouse — библиотека для контроля мыши на Python

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


Код: https://github.com/boppreh/mouse

@pro_python_code
Пишем конвертер валют на Python.

Конвертер валют — это приложение, позволяющее быстро переводить одну валюту в другую по курсу. Такие инструменты массово доступны в интернете, воспользоваться ими можно бесплатно. В этой статье мы разберем, как создать конвертер валют на Python.Мы рассмотрим различные способы получения актуального курса обмена валют. Некоторые из них связаны с парсингом общедоступных веб-страниц, другие — с использованием официальных API (эти данные более надежны и пригодны для коммерческого использования).

Статья: https://uproger.com/pishem-konverter-valyut-na-python/

Код: https://www.thepythoncode.com/code/make-a-currency-converter-in-python

@pro_python_code
Как подключиться к MySQL на Python | MySQL создание таблицы, добавление, удаление, вывод данных

Смотреть видео
Что выведет код?

Ответ: True False True

@pro_python_code
⚡️ Только ключевые и только позиционные аргументы

Читать
Измерение времени выполнения кода

Часто на форумах и чатах возникают горячие споры о том, какой же вариант кода из нескольких выполняется быстрее. К счастью, в Python есть модуль timeit, который позволяет быстро замерить и сравнить производительность кода.

📎 Пример: определим, какой вариант кода быстрее:

>>> import timeit
>>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
0.23387694358825684
>>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000)
0.20793890953063965
>>> timeit.timeit('"-".join(map(str, range(100)))', number=10000)
0.2012779712677002

Оказалось, что третий.

Если в тестируемом кусочке кода вам потребуется обратиться к переменным или модулям из глобальной зоны видимости, то удобно воспользоваться параметром globals и присвоить его результаты функции globals().

>>> import math
>>> my_const = 6.28
>>> timeit.timeit('math.cos(my_const)', globals=globals())
0.12635547306854278

Можно также передавать в timeit имя функции (без параметров):

>>> import timeit
>>> def foo(): "-".join(map(str, range(1000)))
...
>>> timeit.timeit(foo, number=1000)

📎 timeit можно вызвать из терминала:

python -m timeit -s "from math import sqrt" -n 10000 "x = sqrt(25)"

После ключа -s идет строка инициализации; она выполнится единожды. Ключ -n установит число итераций теста (рекомендуется не меньше 1000).

⚠️ Помните, что результаты тестов могут отличаться в зависимости от вашего компьютера, ОС, версии Python, фаз луны и много еще чего. Также советуем вам не увлекаться чрезмерной оптимизацией во вред читаемости кода.

@pro_python_code
Что выведет код?
d = {"a": 2, "b": 3, "c": 2}
f = lambda: zip(d.values(), d.keys())
max_ = max(f())
min_ = min(f())
print(max_, min_)
🔥 Полезные библиотеки Python. Facebook Friend List Scraper

Facebook Friend List Scraper - OSINT инструмент для сбора имен и никнеймов пользователей из больших списков друзей Facebook без ограничения скорости.

📝 Статья

⚙️ GitHub/Инструкция

@pro_python_code
Singleton (Одиночка) — порождающий шаблон проектирования, гарантирующий, что в однопроцессном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.

📎 Реализация синглтона через декоратор класса:

def singleton(cls):
# храним все разные синглтоны с одном словаре (класс -> экземпляр)
instances = {}
def getinstance():
# если класса нет среди ключей нашего словаря - создадим экземпляр
if cls not in instances:
instances[cls] = cls()
# вернем ссылку на него
return instances[cls]
return getinstance


Вот так мы помечаем, что класс MySingleton – синглтон:

@singleton
class MySingleton:
def __init__(self):
self.x = 10
print("__init__")


📎 Пример (проверяем единственность экземляра):

>>> x1 = MySingleton()
init
>>> x2 = MySingleton()
>>> x1 is x2
True
>>> x1.x = 100
>>> x2.x
100

init было вызвано единажды
• Обе переменные указывают на один экземпляр
• При изменении полей в одном экземпляре, они меняются и во втором.

Плохо то, что MySingleton здесь – это функция (результат работы декоратора), а не класс: вы не можете вызывать класс-методы у нее. Эта проблема решается использованием метаклассов.

# обратите внимание, метакласс наследован от type
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]

Прим
енение (Python 3):

class MySingleton(metaclass=Singleton):
def __init__(self):
self.x = 10
print("__init__")

⚠️ Не злоупотребляйте синглтонами, они осложняют тестирование кода.

@pro_python_code
🔥 CompressedCrack Python скрипт для подбора паролей к zip и rar архивам.

CompressedCrack - простой и эффективный скрипт для подбора паролей к zip и rar архивам.

Установка:
$ git clone https://github.com/thanhminh6996/CompressedCrack.git

$ cd ./CompressedCrack

Использование:
Нас интересует скрипт crack.py который принимает несколько параметров:

$ python crack.py -i file_name min_character max_character characters

🌵 -i file_name : путь до архива.
🌵 min_character: минимальное количество символов в пароле.
🌵 max_character: максимальное количество символов в пароле.
🌵 characters: используемые в пароле символы по которым будет осуществляться перебор, 123qwerty!@$ и т.д.

$ python crack.py -i file.zip 1 5 1234567890

⚙️ GitHub/Инструкция

@pro_python_code
Каким будет результат выполнения кода?
Anonymous Quiz
6%
2*34+23+3
11%
2*34 + 23 + 3
2%
243
58%
666
2%
None
7%
Error
14%
Узнать ответ
🌟 Малоизвестная фишка генератора

Если функция принимает единственный аргумент, то можно в нее передать генераторное выражение без скобок:

>>> sum(x * x for x in range(5))
30

Тоже самое, что и:

>>> sum((x * x for x in range(5)))
30


Но вне вызова функции генератор недопустимо использовать без скобок – это синтаксическая ошибка:

>>> g = x * x for x in range(5)
File "<stdin>", line 1
g = x * x for x in range(5)
^
SyntaxError: invalid syntax


@pro_python_code