Python на примерах
1.39K subscribers
411 photos
6 videos
145 links
Короткие уроки Python на примерах
Download Telegram
🔁 Бесконечный for без while

Можно ли сделать бесконечный цикл без while True? Конечно! Вот один из способов:

for _ in iter(int, 1):
print("Работаю бесконечно...")


Почему это работает?
👉 iter(int, 1) создаёт итератор, который вызывает int() до тех пор, пока результат не станет равен 1.
Поскольку int() без аргументов всегда возвращает 0, условие никогда не выполнится - цикл бесконечен.

Такой трюк не только работает, но и удивляет тех, кто видит это впервые 👀
👍4
pywhatkit

Открывает сайты, пишет в WhatsApp, рисует ASCII, ищет в Google и даже управляет клавиатурой.

🔍 1. Поиск в Google

import pywhatkit as kit

kit.search("как стать Python-разработчиком")


🔹 Откроется вкладка браузера с результатами поиска.

---

💬 2. Отправка сообщения в WhatsApp

import pywhatkit as kit

kit.sendwhatmsg("+79991234567", "Привет с Python 👋", 15, 30)


🔹 Отправит сообщение в WhatsApp в 15:30. Работает только с установленным WhatsApp Web.
⚠️ Нужно запускать заранее — за 1–2 минуты до указанного времени.

---
🖼 3. Преобразование изображения в ASCII-арт

kit.image_to_ascii_art("cat.jpg", "cat_ascii")


🔹 Создаст файл cat_ascii.txt с артом из символов.

---
🖱 4. Управление клавиатурой

kit.send_keys("Notepad", "Hello from Python!")


🔹 Отправляет текст в указанное активное окно (например, блокнот). Подходит для автоматизации.

---
🧠 5. Случайный факт

kit.info("Python programming", lines=3)


🔹 Выведет краткую справку из Википедии (3 строки).

---

📦 Установка:

pip install pywhatkit
Модуль doctest

Модуль doctest — это легкий фреймворк для тестирования, который позволяет автоматизировать тестирование кода, используя его документацию. Модуль ищет в документации примеры кода, которые можно выполнить, и проверяет, соответствуют ли результаты ожидаемым.

Как использовать doctest?

Чтобы использовать doctest, необходимо импортировать его в свой код:

import doctest


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

Чтобы запустить тесты doctest, вы можете использовать функцию doctest.testmod(). Если тесты пройдут успешно, ничего не будет напечатано. Если тесты потерпят неудачу, будет напечатано сообщение об ошибке, указывающее на причину неудачи.
rich - красивый вывод в консоли

Позволяет делать форматирование, таблицы, прогресс-бары, markdown и даже графики прямо в терминале.
🎨 1. Цветной и стильный текст

from rich import print

print("[bold magenta]Hello[/bold magenta], [green]Pythonistas![/green] 🐍")


🟣 Жирный текст с цветами - как Markdown, но для терминала.

---

📊 2. Прогресс-бар

from rich.progress import track
import time

for step in track(range(10), description="Обработка..."):
time.sleep(0.2)


🔹 Удобно для загрузок, циклов, задач.

---

📋 3. Таблица

from rich.table import Table
from rich.console import Console

table = Table(title="Список задач")

table.add_column("ID", justify="right", style="cyan")
table.add_column("Описание", style="magenta")
table.add_column("Статус", style="green")

table.add_row("1", "Сделать кофе", "☕️ Готово")
table.add_row("2", "Написать скрипт", "💻 В процессе")
table.add_row("3", "Отдохнуть", "😴 Запланировано")

console = Console()
console.print(table)


🧾 Создаёт красивые ASCII-таблицы - читаемо и стильно.

---

📝 4. Markdown прямо в консоли

from rich.console import Console
from rich.markdown import Markdown

md = Markdown("""
# Заголовок
**Жирный текст**
- Пункт 1
- Пункт 2
""")

Console().print(md)


---

📦 Установка:

pip install rich
Всех с Днем знаний!
Перейдём к основам-основам

В Python есть два типа типов: изменяемые (list, set, dict) и неизменяемые (bool, int, float, complex, tuple, str, frozenset).

Зачем такие сложности? Неизменяемые типы сохраняют данные, не позволяя другим объектам на них повлиять.
👍2
Несколько фишек Python

1. Мы можем передать кортеж функции isinstance, тогда она будет проверять, относится ли x к одному из этих типов.

2. round может округлять в обратную сторону. То есть не только до дестых, но и до десяток.

3. В один except можно записывать несколько ошибок на обработку.
👍1
12 небольших фишек для улучшения твоего кода

1. Обмен значений
x, y = 1, 2
x, y = y, x

2. Получение строки из списка
a_list = [‘I’, ‘like’, ‘python’, ‘programming’]
a_string = “ “.join(a_list)

3. Разбиение строки на список
a_string = ‘I like python programming’
a_list = a_string.split()

4. Инициализация листа каким либо значением
[0]*1000 # лист, заполненный 1000 нулями
[1]*1000 # лист, заполненный 1000 единицами

5. Слияние словарей
x = {‘a’:1, ‘b’:2}
y = {‘c’:3, ‘d’:4}
z = {**x, **y}

6. Переворачивание строки
a = ‘My string’
a = a[::-1]

7. Возврат нескольких переменных из функции
def test(x,y):
return x,y
a,b = test(1,2)

8. Итерирование по словарю
a_dict = {‘a’:1, ‘b’:2, ’c’:3}
for k, v in a_dict.items():
print(‘{0}:{1}’.format(k, v))

9. Инициализация пустых контейнеров
a_list = list()
a_dict = dict()
a_set = set()
a_tuple = tuple()

10. Удаление символов в конце строки
my_string = ‘My string///‘
my_string.strip(‘/‘)

11. Проверка занимаемой объектом памяти
import sys
x = 1
print(sys.getsizeof(x))

12. Нахождение наиболее частого элемента в списке
a_list = [1, 2, 3, 1, 1, 4, 1, 4, 4, 1]
print(max(set(a_list), key=a_list.count))
❤1👍1👎1
Что такое __name__ ?

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

Переменная получает значение '__main__', если программу запустили напрямую (python file.py). Если же файл импортировали как модуль, он получает своё название.
Фабричный метод

Фабричный метод используется как средство предоставления фабричных интерфейсов для создания объектов.

Они позволяют ослабить связи в коде и упростить его: чаще всего он используется, если вам нужно создать объект по какому-то условию.

Таким образом, мы перемещаем большое количество if/elif/else-кода в отдельный метод.
​​📌Функция sum() в python3
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?

Это можно сделать с помощью стандартной функции sum():

Cинтакс функции sum().
sum(iterable, start)

Параметры sum():
iterable - итерируемые типы (list , dict , tuple, и.т.д.)
start - (необезательно) - значение этого параметра прибавляется к уже готовой сумме элементов iterable.По умолчанию значение этого парметра 0.

Возвращаемое значение из sum():
sum() возвращает сумму start и элементов iterable.

Пример:
numbers = [1,5,5]
#парметр start передается со значением по умолчанию(0).
numbers_sum = sum (numbers);
print (numbers_sum)
# парметр start передается со значением 7.
numbers_sum = sum (numbers, 7)
print (numbers_sum)

✅Результат:
11
18

🔴Примечания:

Если вам нужно использовать sum() с floating-point элементами iterable с правильной точностью после запятой , до использования
sum(iterable , start) , нужно вместе c import math добавить следующую строку. math.fsum(iterable).

Если вам нужно соединить(concatenate) элементы iterable (элементы должны быть string), тогда вы можете использовать метод join()

Пример:
myTuple = ("Python", "Lounge", "is", "the","best")
x = " ".join(myTuple)
print (x)

✅Результат:
Python Lounge is the best
Декораторы

Это функции, которые меняют поведение других функций, не меняя код внутри них.

Сами по себе декораторы составляют вызываемый объект (функция, класс с __call__), который возвращает другой вызываемый объект.

@wraps используется для изменения некоторых значения (__name__, __doc__) на значения функции, с которой мы работаем, а не декоратора.
Функция exit создана для удобства работы в интерактивном режиме, однако не рекомендуется использовать её внутри скриптов. По факту она также просто поднимают исключение, и при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора:

>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
nameless@pycoders:~$

Использовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.

import sys

try:
# code
except:
sys.exit()
👍2
Разница между is и ==

Каждый объект хранится в памяти и имеет свой номер, по которому можно его найти. Этот номер можно получить с помощью функции id().

is занимается сравниванием этих самых адресов. В то время как == вызывает функцию __eq__ и предназначения для сравнения значений класса.

Представьте куб, а потом ещё один такой же. Они одинаковые, но это два абсолютно разных объекта. Также и в программировании.
❤1👍1🤨1
💡Лайфхаки и памятки для питонистов

👉Вывести в консоль 2 или более списков одновременно.
>>>list1 = [1, 3, 5, 7]
>>>list2 = [2, 4, 6, 8]
>>>for a, b in zip(list1, list2):
...print (a, b)
Output:
>>>1 2
>>>3 4
>>>5 6
>>>7 8

👉Превратить строку в список.
>>>formatted_list = list(map(int, input().split()))
>>>print (formatted_list)
Output:
>>>[1, 2, 3]

👉Превратить список списков в один список.
>>>import itertools
>>>list1 = [[1,2], [3,4], [5,6]]
>>>lst = list(itertools.chain.from_iterable(list1))
Output:
>>>[1, 2, 3, 4, 5, 6]

👉Раздробить список в группы.
>>>list1 = ['Sun', 'Flowers', 'Peoples', 'Animals', 'Day', 'Night']
>>>partition = list(zip(*[iter(list1)] * 2))
>>>print(partition)
Output:
>>>[('Sun', 'Flowers'), ('Peoples', 'Animals'), ('Day', 'Night')]
🔥Must-Have Библиотеки для python разработчика.

👉PyGame - pygame - это бесплатная кросс-платформенная библиотека с открытым исходным кодом для разработки мультимедийных приложений, таких как видеоигры, с использованием Python.

👉Random - Этот модуль реализует генераторы псевдослучайных чисел для различных распределений.

👉Numpy - Фундаментальный пакет для научных вычислений с Python

👉OS - этот модуль обеспечивает переносимый способ использования функций, зависящих от операционной системы.

👉Collections - Этот модуль реализует специализированные типы данных контейнеров, предоставляя альтернативы встроенным контейнерам общего назначения Python.

👉SubProcess - Модуль подпроцесса позволяет создавать новые процессы, подключаться к их каналам ввода / вывода / ошибок и получать их коды возврата. Этот модуль предназначен для замены нескольких старых модулей и функций:

👉Functools - Модуль functools предназначен для функций высшего порядка: функций, которые действуют или возвращают другие функции. В общем, любой вызываемый объект может рассматриваться как функция для целей этого модуля.

👉Itertools - Этот модуль реализует ряд строительных блоков итератора, вдохновленных конструкциями из APL, Haskell и SML. Каждый был переработан в форме, подходящей для Python.
Так что же такое NaN

Not a number
(не число) — состояние числа с плавающей запятой, при котором машине не удалось посчитать какое-то выражение.

Компьютер не в силах поделить 0 на 0 или узнать asin(2), поэтому возвращает NaN.

Его особенностью среди других чисел является то, что оно не равно самому себе.
Что делает @staticmethod?

Иногда метод внутри класса не использует ни self, ни cls.

Тогда — @staticmethod.

class Math:
@staticmethod
def add(x, y):
return x + y


Никаких ссылок на экземпляры — просто удобный способ логически сгруппировать функции внутри класса.
👍1
Про functools

Это модуль с полезными функциями... для работы с функциями. Например:

@cache — простой легкий неограниченный кеш функций. Если функция долго вычисляется, то вы можете сохранить сохранить результат в памяти, чтобы потом его не считать, а брать оттуда.

partial(func, *args, **keywords) — возвращает вызываемый объект, который вызывает полученную функция с переданными при создании аргументами и во время вызова.

Но и это ещё не всё, в модуле много фишек, которые можно узнать из документации.
Цепочка операторов

Синтаксический сахар для упрощения проверок. Работает со всеми операторами сравнения (<, ==, >, ...), is и in. Цепь может состоять из любого количества операторов.

Хочу заметить, что цепь не создаёт никаких связей, так что вы вполне можете написать так: x < y > z. Если увидите это на проде, пишите git blame и ищите, кому бить морду.
Что такое `self` в методах класса?

self — это ссылка на текущий экземпляр класса. Через неё мы получаем доступ к атрибутам и методам объекта.

class Dog:
def __init__(self, name):
self.name = name

def bark(self):
print(f"{self.name} лает")

rex = Dog("Рекс")
rex.bark() # Рекс лает


Без self Python не поймёт, к какому объекту относятся переменные внутри класса.
👍2
Хочешь использовать ChatGPT, BERT, Stable Diffusion, T5 и другие мощные модели прямо в Python-коде?
Бери transformers от Hugging Face.

Умеет:

* Загружать готовые модели
* Работать с текстом, изображениями, аудио
* Генерировать, классифицировать, переводить, резюмировать

Пример генерации текста:

from transformers import pipeline

generator = pipeline("text-generation", model="gpt2")
result = generator("В далёком будущем", max_length=30, num_return_sequences=1)
print(result[0]["generated_text"])


Установка:

pip install transformers


⚡️ Бонус: можно использовать как с PyTorch, так и с TensorFlow. Под капотом самые топовые модели AI.
❤1👍1