Python Academy
43.8K subscribers
1.61K photos
2 videos
500 links
Python Academy — один канал вместо тысячи учебников

Чат канала: @python_academy_chat

Сотрудничество: @zubar89

Канал включён в перечень РКН: https://rkn.link/TVu
Download Telegram
Понимание различий между операторами сравнения == и is

Множество разработчиков сталкиваются с трудностями в отличии двух операторов сравнения: == и is, что может привести к неожиданным ошибкам в коде.

Оператор == сравнивает значения двух объектов, чтобы определить их равенство. В отличие от него, оператор is проверяет, ссылаются ли две переменные на один и тот же объект в памяти, тем самым проверяя их идентичность.

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

#python
❤4👎1
Получение срезов итераторов

Если вы попытаетесь получить срез итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению (см картинку).

Воспользовавшись методом itertools.islice, можно создать объект islice, который представляет собой итератор, выдающий нужные элементы. Однако здесь важно отметить то, что эта конструкция использует все элементы генератора вплоть до начала среза и все элементы в объекте islice.

#python
❤3👎2
Возврат нескольких значений из функции

Знаете ли вы, что можно осуществлять возврат нескольких значений из функции? Вот как это сделать. Ознакомьтесь с приведенным выше примером кода.

#python
👎5❤2
Знакомство с библиотекой NumPy в Python

Что такое
NumPy?
NumPy (Numerical Python) - это популярная библиотека для вычислительных операций с многомерными массивами и матрицами, а также для выполнения высокоуровневых математических функций. Она предоставляет эффективные инструменты для работы с большими объемами данных и позволяет выполнять различные операции, такие как суммирование, умножение, индексацию и многое другое, без необходимости явно создавать циклы.

Преимущества NumPy:
- Производительность: NumPy выполняет операции над массивами быстрее, чем стандартные структуры данных Python.
- Удобство: NumPy предоставляет удобные методы для работы с данными, такие как срезы, индексация и броадкастинг.
- Интеграция: Библиотека интегрируется легко с другими библиотеками, такими как SciPy, pandas и Matplotlib, что делает ее мощным инструментом для научных вычислений.

Пример использования NumPy:

import numpy as np

# Создаем одномерный массив
arr = np.array([1, 2, 3, 4, 5])

# Выполняем операции над массивом
arr_squared = arr ** 2
arr_sum = np.sum(arr)

print("Исходный массив:", arr)
print("Квадраты элементов:", arr_squared)
print("Сумма элементов:", arr_sum)

NumPy также предоставляет функции для работы с многомерными массивами, линейной алгеброй, случайными числами и многое другое.

#python #NumPy #научныевычисления #анализданных
👍4👎1
Работаем с атрибутами объектов

Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции: getattr, setattr, delattr и hasattr.

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

Во всех функциях первыми двумя аргументами идут объект и название атрибута в виде строки. В setattr также нужно передать новое значение для атрибута.

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

#python #tips
👍6👎2
Разница между генераторными выражениями и генераторами коллекций

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

Распечатав переменные, можно заметить, что значением переменной a является список, а переменная x хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

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

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

#python
👍5👎1
Настройка ширины текста с использованием модуля textwrap

textwrap предоставляет функции для форматирования текста, делая его более читаемым и приятным для восприятия. Одной из таких функций является fill, которая позволяет настраивать ширину текста в символах, обеспечивая корректное перенос слов на новые строки.

Приведем пример использования:
import textwrap

# Исходный текст
original_text = "Мощные функции модуля textwrap обеспечивают красивое форматирование текста, а функция fill позволяет задать ширину текста в символах."

# Задаем ширину текста в 30 символов
width = 30

# Применяем функцию fill для форматирования текста
formatted_text = textwrap.fill(original_text, width)

print(formatted_text)


Результат выполнения кода будет следующим:
Мощные функции модуля
textwrap обеспечивают
красивое форматирование
текста, а функция fill
позволяет задать ширину
текста в символах.


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

#python #textwrap
👍7👎1
Ruff

Ruff — Чрезвычайно быстрый линтер и форматер кода на Python, написанный на Rust.

Основным преимуществом Ruff является его скорость. Ruff в 10-100 раз быстрее аналогов. В сравнении с flake8, автор заявляет о практически полном совпадении с набором правил инструмента и нативной реализацией популярных плагинов (flake8-bugbear и т.д.). Также Ruff совместим с Black «из коробки».

Ruff может форматировать код. Например, он автоматически удаляет неиспользуемые импорты. Что касается сортировки и группировки строк импорта, то она практически идентична isort.

#python #ruff
❤6👍3👎1
dict.get()

dict.get() — это метод словаря, который используется для получения значения по заданному ключу. Однако, в отличие от обращения к элементу словаря с использованием квадратных скобок (dict[key]), метод get() предоставляет дополнительную возможность задать значение по умолчанию, которое будет возвращено, если ключ не найден в словаре.

Синтаксис метода get() выглядит так:

value = dict.get(key, default)

key: Ключ, по которому производится поиск в словаре.
default (необязательный): Значение, которое будет возвращено, если ключ не найден в словаре. Если default не указан, и ключ не найден, метод вернет None.

#python
👍2👎1
Исследование структуры кода с помощью модуля ast

При работе с кодом на Python, иногда возникает необходимость анализа его структуры. Для этого идеально подходит модуль ast (Abstract Syntax Trees), который предоставляет мощные инструменты для работы с абстрактными синтаксическими деревьями.

Что такое ast?

ast - это модуль Python, который позволяет разбирать и анализировать исходный код на Python, представляя его в виде абстрактного синтаксического дерева (AST). AST представляет собой структурированное представление кода, которое легко интерпретировать и анализировать.

Пример использования модуля ast:

import ast

code = "print('Hello, ast!')"
tree = ast.parse(code)

print(ast.dump(tree))


В данном примере мы использовали функцию ast.parse для разбора строки кода с помощью модуля ast. Функция ast.dump выводит структуру AST в удобочитаемом формате.

Анализ структуры кода:

import ast

code = """
def greet(name):
print(f'Hello, {name}!')
"""

tree = ast.parse(code)

for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef):
print(f"Найдена функция: {node.name}")
elif isinstance(node, ast.Print):
print("Обнаружен оператор печати")

В данном примере мы использовали модуль ast для анализа структуры кода. Функция ast.walk позволяет обойти все узлы AST, а затем мы проверяем их типы для выделения определенных элементов, таких как функции или операторы.

Модуль ast также предоставляет возможности для более сложных операций, таких как изменение кода, создание новых выражений и многое другое.

#python #ast #анализкода
👍2👎1
Дзен Python

Тим Петерс ещё в далёком 1999 году предложил PEP 20, который должен был содержать в себе 20 правил по написанию кода. Но в итоге их оказалось всего 19.

Последний пункт он предложил написать Гвидо Ван Россуму, однако он не написал ничего. В коммьюнити Python пришли к выводу, что разработчик языка хотел этим сказать, что никакие правила не являются абсолютными и везде есть исключения.

Посмотреть Дзен, или же философию Python, можно с помощью импорта модуля this, а вариант перевода Дзена на русском языке здесь.

#python #дзен
❤3👍1
Используйте dict.get() вместо dict[]

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

Многие получают значения по ключам через квадратные скобки, но если такого ключа нет, то будет вызвано исключение.

Поэтому мы считаем, что лучше использовать метод get у словарей. Его основной плюс заключается в том, что он принимает опциональный аргумент, отвечающий за значение по умолчанию.

Таким образом, если значение по ключу не найдено, то вернется дефолтное значение.

В итоге, мы убираем возможные ошибки в случае, если нужных ключей в словаре нет.

#python #dict
👍2👎1
Слайсы

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

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

#python #slice
Форматируем строку для URL-адреса

Для начала стоит вспомнить, что слаг (slug) — это уникальная строка-идентификатор, понятная человеку и содержащая только "безопасные" символы: латинские символы в нижнем регистре, цифры и дефис.

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

Выше в коде мы написали простую функцию, где использовали методы lower() для приведения в нижний регистр и strip() для удаления пробелов слева и справа.

Также для удаления некоторых символов и замены на знак дефиса были использованы регулярные выражения и встроенный пакет re для работы с ними.

#python #re
👍3