Python на примерах
1.39K subscribers
411 photos
6 videos
145 links
Короткие уроки Python на примерах
Download Telegram
PsychoPy

PsychoPy — это программное обеспечение для создания экспериментов в области психологии, нейронауки и экспериментальной психиатрии с использованием языка программирования Python. Он предоставляет инструменты для создания различных видов стимулов, управления временем, сбора данных и анализа результатов.

В примере на картинке мы создаем окно, текстовый стимул, отображаем его, ждем 2 секунды и затем закрываем окно. PsychoPy предоставляет богатый набор функций для создания более сложных экспериментов, таких как представление изображений, воспроизведение звуков, сбор данных о времени реакции и многое другое.
Как работает хэш-таблица в Python (dict):

🔹 Хэширование - при добавлении элемента вызывается hash(key), и получается целое число - хэш ключа.

🔹 Коллизии - если два ключа выдают одинаковый хэш, Python сохраняет их в одну "ячейку" (обычно в виде списка). Это называется метод цепочек.

🔹 Поиск - при доступе по ключу Python вычисляет его хэш и ищет значение в нужной ячейке. Быстро и эффективно.

⚡️ Словари — одна из причин, почему Python так удобен.
🔥1
🐍 Python + Emojis = читаемый код?

Знаешь ли ты, что Python позволяет использовать emoji как имена переменных?

🔥 = 100  
💧 = 20
print(🔥 - 💧) # 80


Да, это работает! Python видит emoji как обычные юникод-символы. Конечно, так писать код в проде - плохая идея, но для фана или внутренних инструментов почему бы и нет?

⚠️ Внимание: поддержка может зависеть от шрифта и среды (IDE, консоль и т.д.).
JPype: работаем с Java из Python

JPype позволяет запускать Java-код прямо из Python, подключая JVM и используя Java-классы как обычные Python-объекты.

📌 Примеры применения:
– Подключение Java-библиотек
– Интеграция с существующими Java-системами
– Запуск JVM прямо из Python-кода

import jpype

jpype.startJVM()
String = jpype.JClass("java.lang.String")
javaString = String("Hello from Java!")
print(javaString.toUpperCase())
jpype.shutdownJVM()


🔧 Результат:
HELLO FROM JAVA!

Полезный инструмент, если нужен доступ к мощным Java-библиотекам без отказа от Python.
Метод missing

Метод missing — это магический метод, который вызывается, когда попытка доступа к несуществующему ключу в словаре. По умолчанию метод missing бросает исключение KeyError. Однако его можно переопределить, чтобы обеспечить другое поведение.

Общая форма метода missing выглядит следующим образом:

def __missing__(self, key):
# ...


Аргумент self представляет собой экземпляр словаря, в котором произошло обращение к несуществующему ключу. Аргумент key представляет собой сам несуществующий ключ.
🔁 Бесконечный 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.

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