Поколение Python 🐍
43.1K subscribers
1.61K photos
15 videos
5 files
675 links
Серия курсов по языку Python от BEEGEEK 🐝.

Сайт: pygen.ru
Мерч: shop.pygen.ru
Чат: @pygen_ru_comments
Бот: @pygen_ru_bot
Поддержка: @pygen_ru_support

Перечень РКН: https://www.gosuslugi.ru/snet/673650d605391b3bfb5541c0
Download Telegram
Друзья, сегодня поговорим об ошибке SyntaxError: unterminated string literal. 🤓

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

Где же мы ошиблись в нашей программе?

Дело в том, что список books содержит строковый литерал 'Fluent Python" с разными открывающей и закрывающей кавычками.

‼️‼️‼️❗️ Открывающие и закрывающие кавычки в строке должны быть одинаковыми. Если мы используем одинарную открывающую кавычку, то закрывающая тоже должна быть одинарной.

Эта ошибка встречается и при работе с многострочными строками: например, когда многострочная строка заключена в одинарные кавычки (' или "):
text = 'Python is a high-level, 
general-purpose
programming language'


Как избежать этой ошибки?

1️⃣ Использовать для создания многострочной строки тройные кавычки (''' или """):
text = '''Python is a high-level, 
general-purpose
programming language'''


2️⃣ Добавить символ переноса фрагмента строки на следующую строку (\):
text = 'Python is a high-level, \
general-purpose \
programming language'


Ставьте реакцию
:

😎 — если сразу нашли ошибку в коде
👀 — если ошибку отыскать не удалось

#python #полезныйматериал #чтоозначаетошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
👀105😎49👍1973🤔2🏆1🍾11
Друзья, а вы знали, что оператор else используется не только с оператором if, но и в других конструкциях Python?

📌 Оператор else может использоваться в следующих сценариях:

1️⃣ С оператором if

В конструкции if/else блок else выполняется только тогда, когда не выполняется условие в if, а в конструкции if/elif/else — только тогда, когда не выполняется ни одно из условий в if и elif.

2️⃣ С оператором try

В конструкции try/except блок else выполняется только тогда, когда в блоке try не возникло исключение.

3️⃣ С циклами for и while

В конструкциях for/else и while/else блок else выполняется только тогда, когда цикл завершился штатно, то есть не было преждевременного выхода из цикла с помощью оператора break.

✔️ Во всех перечисленных сценариях оператор else не является обязательным, однако его использование в данных конструкциях часто упрощает чтение кода и позволяет в некоторых ситуациях отказаться, например, от флагов и дополнительных проверок.

‼️‼️‼️❗️ Оператор else нельзя использовать отдельно от if, for, while или блока try. Он всегда должен быть частью конструкции, которая его поддерживает.

Ставьте реакцию:

😎 — если знали все варианты использования else
👀 — если узнали о некоторых впервые

#python #полезныйматериал #else
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👀205😎164👍2132🔥2🤩1😍1👻1👨‍💻1👾1
Друзья, сегодня расскажем, в чем разница между понятиями "неизменяемый объект" и "хешируемый объект".

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

▫️Неизменяемый объект — это объект, состояние которого не может быть изменено после создания.

▫️Хешируемый объект — это объект, который имеет хеш-значение.

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

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

📌 Как правило, неизменяемые объекты являются хешируемыми, а изменяемые — нехешируемыми. Однако есть исключение: кортежи являются неизменяемыми, но могут быть хешируемыми и нехешируемыми в зависимости от своего содержимого:

▫️кортеж является хешируемым, если все его элементы хешируемые
▫️кортеж является нехешируемым, если хотя бы один из его элементов нехешируемый

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

Например, кортеж (1, [2, 3]) содержит в качестве элемента нехешируемый список [2, 3], а значит, и сам кортеж не имеет хеш-значения. Поэтому при попытке добавить этот кортеж в множество будет возбуждено исключение TypeError: unhashable type: 'list'.

Ставьте реакцию:

😎 — если знали, что кортежи могут быть хешируемыми и нехешируемыми
👀 — если слышите об этом впервые

🔝🔝🔝Сохраняй пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
21👀165😎67🔥1698😍1🍾1👻1👨‍💻1🎄1🆒1
Друзья, сегодня поговорим об аннотациях типов в Python.

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

❤️Аннотации типов (Type Hints) — это специальный синтаксис для объявления типов различных структур в программе. Эта функциональность появилась в Python 3.5 и совершенствуется с каждой новой версией языка.

❤️Например, аннотации типов позволяют объявлять типы параметров функций и их возвращаемых значений.

В приведенном ниже коде:

def greet(name: str) -> str:
return f'Hello {name}!'


❤️запись name: str означает, что параметр name в определении функции принимает в качестве значения строку (тип str)
❤️запись -> str обозначает тип возвращаемого функцией значения

❤️Для аннотирования более сложных конструкций в Python используются инструменты из встроенного модуля typing.

❤️Аннотации типов игнорируются интерпретатором и никак не влияют на выполнение программы. Они используются для улучшения читаемости кода, а также для поиска ошибок типов до выполнения программы с помощью статических анализаторов (например, mypy).

❤️ Отметим, что аннотации типов не являются обязательными. Программист сам выбирает, аннотировать свой код или нет.

Почитать подробнее про аннотации типов можно в PEP 484 и PEP 526. Документация модуля typing доступна по ссылке.

Ставьте реакцию:

😎 — если знали, что такое аннотации типов
👀 — если слышите о них впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #аннотациитипов #typehints
Please open Telegram to view this post
VIEW IN TELEGRAM
51😎103👀45👍7🔥7431👏1🙏1🆒11
Друзья, сегодня поговорим о пяти способах обмена значений переменных в Python. 😄

1⃣Третья переменная

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

2⃣Позиционное присваивание

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

3⃣Операторы + и -

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

4⃣Операторы * и /

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

5⃣Побитовый оператор ^

Для обмена целочисленных значений переменных можно использовать побитовый оператор ^ (побитовое исключающее ИЛИ). Он оперирует битами чисел, сравнивая их двоичные представления и переворачивая отличающиеся биты в соответствии со своей таблицей истинности. Данный способ является эффективным, однако он может быть не совсем очевидным и сложным для чтения.

Ставьте реакцию:

🔥 — если знали все 5 способов
👀 — если слышите о некоторых впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
👀159👍21🔥17🏆221🎉1🤝1🆒1😎11
Друзья, сегодня поговорим о типах ошибок, с которыми сталкиваются программисты при написании программ. 😳

❤️ При разработке программ на любом языке программирования практически всегда возникают различные ошибки. В Python выделяют следующие их типы:

Синтаксические ошибки возникают из-за несоблюдения общепринятого синтаксиса языка.

В приведенном ниже коде:

def square(num)
return num ** 2


пропущено двоеточие в определении функции. При попытке запуска данного кода мы получим синтаксическую ошибку: SyntaxError: expected ':'

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

В приведенном ниже коде:

def avg(a, b):
return a + b / 2

print(avg(6, 14)) # 13.0 - неверный результат


описана функция avg(), возвращающая среднее значение переданных в нее аргументов. В теле функции допущена логическая ошибка — пропущены скобки, на два необходимо делить сумму чисел a и b.

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

Ошибки времени выполнения (исключения) возникают в процессе выполнения программы и связаны с некорректными действиями пользователя или системы.

Приведенный ниже код:

num1 = 10
num2 = 0

print(num1 / num2)


выводит: ZeroDivisionError: division by zero

Деление на ноль приводит к аварийному завершению работы программы и выводу ошибки. ZeroDivisionError — это название исключения, а division by zero — его краткое описание.

Ставьте реакцию:

😎 — если редко допускаете ошибки
🫡 — если ошибки — наше всё! 😄

❤️Делитесь в комментариях, с каким типом ошибок при написании программ вы сталкиваетесь чаще всего?

#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
5🫡215😎1513👍9🔥52👏1🤩1👨‍💻1🆒11
Друзья, а вы знали, что функция range() возвращает особый объект типа range? 👀

📍 Функция range() используется для генерации последовательности целых чисел с заданным шагом. Она может принимать три аргумента:

🔘start — начало последовательности (включительно)
🔘stop — конец последовательности (не включительно)
🔘step — шаг последовательности

Приведенный ниже код:
print(*range(10))
print(*range(1, 10))
print(*range(2, 10, 2))

выводит:
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
2 4 6 8

📍 На самом деле функция range() является классом, который представляет собой отдельный неизменяемый тип данных. Объекты данного класса называют диапазонами.

🔘 Диапазоны похожи на последовательности в Python (строки, списки, кортежи). Они поддерживают:

🔘итерацию по элементам
🔘индексацию
🔘срезы (возвращается новый объект типа range)
🔘нахождение длины с помощью функции len()
🔘операторы ==, != и in
🔘методы index() и count()

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

🔥 Главное преимущество типа range над строками, списками и кортежами заключается в том, что объект типа range всегда занимает небольшое фиксированное количество памяти, независимо от размера представляемого им диапазона чисел. Он хранит в памяти только значения start, stop и step, а элементы диапазона вычисляются по мере необходимости.

Ставьте реакцию:

🔥 — если знали про тип данных range
👀 — если слышите о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #range
Please open Telegram to view this post
VIEW IN TELEGRAM
55🔥184👀68👍2255👏2🆒21🤔1🤩1😈1
Друзья, сегодня поговорим об операторе pass в Python. 😄

📍 В Python существуют конструкции, операторы которых требуют обязательной реализации блока кода. К таким конструкциям относятся:

условные операторы — if/elif/else
циклы — for и while
функции — def
классы — class
контекстные менеджеры — with
операторы обработки исключений — try/except/finally

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

Например, приведенный ниже код:
def func():
# пустой блок кода

выводит IndentationError: expected an indented block after function definition.

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

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

Приведенный ниже код:
def func():
pass

завершается без ошибок.

📍 Помимо оператора pass в качестве заглушки можно использовать встроенную в Python константу Ellipsis или соответствующий ей литерал ....

Приведенный ниже код:
def func():
...

также завершается без ошибок.

📌 Почитать подробнее про константу Ellipsis можно в нашей статье по ссылке. 😉

Ставьте реакцию:

🔥 — если знали про оператор pass
👀 — если узнали о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #pass #Ellipsis
Please open Telegram to view this post
VIEW IN TELEGRAM
24🔥188👀46👍10752👏2🌚1👨‍💻1🆒1
Друзья, сегодня разберем интересный вариант использования встроенной в Python функции open().

🟪Функция open() используется для открытия файлов. Она возвращает специальный файловый объект, который имеет различные методы для работы с открытым файлом. В качестве обязательного аргумента функция open() принимает путь к файлу или файловый дескриптор.

🟪Файловый дескриптор — это целое неотрицательное число, которое является уникальным идентификатором файла и используется операционной системой для управления файлами и другими объектами ввода-вывода.

Первые три файловых дескриптора (0, 1 и 2) зарезервированы под стандартные потоки ввода-вывода:

стандартный ввод STDIN0
стандартный вывод STDOUT1
стандартный вывод ошибок STDERR2

Использование функции open() с данными файловыми дескрипторами является альтернативой работы с объектами stdin (поток ввода), stdout (поток вывода) и stderr (поток вывода ошибок) встроенного модуля sys.

Например, для чтения данных из стандартного ввода вместо импорта объекта sys.stdin можно воспользоваться функцией open(), передав ей в качестве аргумента дескриптор 0, как показано на картинке.

Почитать подробнее про функцию open() можно по ссылке, про объекты стандартных потоков ввода-вывода из модуля sys — по ссылке, про файловые дескрипторы — по ссылке.

Ставьте реакцию:

🔥 — если знали, что такое файловые дескрипторы
👀 — если узнали о них впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
👀110🔥59👍2632🤩1👨‍💻1🆒1
Друзья, сегодня поговорим о перечислениях в Python. 😉

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

📌 В Python для создания перечислений используется класс Enum из встроенного модуля enum. Чтобы создать собственное перечисление, необходимо создать подкласс Enum.

Например, приведенный ниже код:
from enum import Enum

class Weekday(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7

определяет перечисление Weekday, содержащее элементы MONDAY со значением 1, TUESDAY со значением 2 и другие.

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

✔️Основной операцией при работе с перечислениями является доступ к их элементам, которые представляют собой экземпляры класса перечисления. Они имеют атрибуты name и value, в которых содержатся их имена и значения:

from enum import Enum

class Weekday(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7

print(Weekday.MONDAY.name) # MONDAY
print(Weekday.MONDAY.value) # 1


✔️Перечисления являются итерируемыми объектами, поэтому их можно перебирать в цикле и преобразовывать в различные коллекции. Также перечисления поддерживают операции сравнивания, благодаря чему их можно использовать в условных конструкциях, делая их более наглядными.

🔥При разработке программ мы можем обойтись без перечислений, однако они часто упрощают процесс написания кода и улучшают его читаемость. 😎

Почитать подробнее про перечисления в Python можно в документации.

Ставьте реакцию:

🔥 — если знали о перечислениях
👀 — если узнали о них впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #enum
Please open Telegram to view this post
VIEW IN TELEGRAM
1👀113🔥57432👏21🥰1😁1💋1🆒1
Друзья, в одном из предыдущих постов мы говорили о кодах состояния HTTP. Сегодня рассмотрим наиболее популярные клиентские и серверные ошибки. 😨

❤️ Клиентские ошибки представлены кодами состояния 4**:

400 Bad Request
Означает неверный запрос и может возникнуть, например, если запрос не соответствует определенному формату или в нем допущена синтаксическая ошибка.

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

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

404 Not Found
Пожалуй, самая знаменитая ошибка в Интернете. Она означает, что сервер не может найти запрошенный ресурс. Наиболее частой причиной возникновения этой ошибки является указание неверного адреса веб-страницы.

❤️ Серверные ошибки представлены кодами состояния 5**:

500 Internal Server Error
Означает, что на сервере произошла ошибка, в результате которой он не может успешно обработать запрос. Причиной ошибки может быть избыточная нагрузка на сервер, сбой в работе серверного ПО, программная ошибка или проблема с базой данных.

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

Ставьте реакцию:

🙈 — если сталкивались с серверными ошибками на Stepik
😎 — если ни разу не встречали их на Stepik

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #http #кодсостояния
Please open Telegram to view this post
VIEW IN TELEGRAM
10🙈81😎58🔥14👍8222🥰1🤩1👨‍💻1🆒1
Друзья, сегодня поговорим о паттернах проектирования.

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

🟪 Паттерны проектирования — это шаблоны решений типовых задач проектирования программ.

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

создание новых объектов
структурирование системы на основе классов и объектов
построение связей между объектами и распределение обязанностей между ними

Паттерны проектирования также подразделяются на категории в соответствии с задачами, которые они решают:

1⃣Порождающие — предназначены для создания объектов, позволяют системе оставаться независимой как от самого процесса создания, так и от типов создаваемых объектов

2⃣Структурные — рассматривают вопросы грамотной компоновки частей системы

3⃣Поведенческие — решают проблемы взаимосвязи различных частей системы

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

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

Ставьте реакцию:

❤️ — если знали о паттернах проектирования
👀 — если слышите о них впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #паттерныпроектирования
Please open Telegram to view this post
VIEW IN TELEGRAM
👀8157🔥75👍1🥰1🤩1👨‍💻1🆒1😎11
Друзья, сегодня поговорим о том, почему в Python результат выражения 0.1 + 0.1 + 0.1 не равен 0.3. 😨

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

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

0.00011001100110011...

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

Приведенный ниже код:
print(0.1 + 0.1 + 0.1 == 0.3)

выводит False.

📎 Сравнивать числа с плавающей точкой с помощью оператора == не рекомендуется. Вместо этого лучше использовать приближение и проверять, являются ли числа с плавающей точкой "почти равными".

Распространенным способом проверить, почти ли равны два числа с плавающей точкой, является функция isclose() встроенного модуля math.

Приведенный ниже код:
from math import isclose

print(isclose(0.1 + 0.1 + 0.1, 0.3))

выводит True.

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

Ставьте реакцию:

🔥 — если знали эту особенность чисел с плавающей точкой
👀 — если слышите о ней впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥180👀127👍16442❤‍🔥2🆒22😱1🏆1
Друзья, сегодня поговорим о формате данных JSON и встроенном в Python модуле json. 😝

🗂 JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на языке программирования JavaScript. Он легко читается людьми и может использоваться практически с любым языком программирования.

📎Данные в формате JSON чаще всего имеют структуру ключ-значение. Это напоминает словарь в Python, однако JSON в качестве ключей может содержать только строки. В качестве значений в JSON могут быть использованы:

🟣строка
🟣число (целое или вещественное)
🟣литералы true, false и null (отсутствие значения)
🟣список (заключается в квадратные скобки [])
🟣вложенный объект (неупорядоченное множество пар ключ-значение, заключенное в фигурные скобки {})

😌 Важно: JSON поддерживает строки только в двойных кавычках.

⬆️На картинке представлен пример JSON-представления данных об объекте, описывающем человека.

🗂 Преобразование Python-объектов в формат для хранения называется сериализацией, а обратное преобразование — десериализацией.

Python для сериализации и десериализации в формат JSON предоставляет встроенный модуль json, который содержит следующие функции:

▫️dumps() — для сериализации объектов в json-строку
▫️dump() — для сериализации объектов в файл .json
▫️loads() — для десериализации json-строки в объект
▫️load() — для десериализации объектов из файла .json

Почитать подробнее о формате данных JSON можно по ссылке, о модуле json — по ссылке.

Ставьте реакцию:

🔥 — если знали о формате данных JSON
👀 — если узнали о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #json
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥174👀5010👍963💯1😇1💘1👾1
Друзья, сегодня поговорим о типе bytes в Python.

📌 В Python 3 строки представлены последовательностью символов. Каждый символ имеет байтовое представление — последовательность байтов, которая определяется кодировкой — алгоритмом преобразования идентификаторов символов Unicode в последовательности байтов и наоборот.

Каждый байт последовательности представляет собой число от 0 до 255, которое записывается двумя шестнадцатеричными цифрами с префиксом \x. Например, строка Beegeek в байтовом представлении имеет следующий вид:

b'\x42\x65\x65\x67\x65\x65\x6b'

В Python для работы с последовательностями байтов используется тип bytes, который представляет собой неизменяемую последовательность байтов в виде байтовой строки. Перед байтовой строкой указывается префикс b.

Приведенный ниже код:
s = b'\x42\x65\x65\x67\x65\x65\x6b'
print(s)
print(type(s))


выводит:
b'Beegeek'
<class 'bytes'>

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

Приведенный ниже код:
s = 'Beegeek'

print(s.encode())
print(bytes(s, 'utf-8'))


выводит:
b'Beegeek'
b'Beegeek'

😉 Объектам типа bytes доступны практически все те же методы, что и объектам типа str.

Приведенный ниже код:
s = 'Beegeek'.encode()

print(s.upper())
print(s.count(b'e'))


выводит:
b'BEEGEEK'
4

📌 Тип bytes используется для работы с бинарными файлами, сетевыми протоколами и в различных низкоуровневых операциях. Почитать о нем подробнее можно по ссылке.

Ставьте реакцию:

🔥 — если знали о типе bytes
👀 — если узнали о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
👀103🔥5312👍832🤩2🍾1💋1
Друзья, ранее мы рассмотрели тип bytes, представляющий байтовые строки в Python. Сегодня поговорим об изменяемом аналоге байтовых строк — типе bytearray. 😎

📎Объекты типа bytearray представляют собой байтовые массивы. Процесс их создания довольно прост: необходимо создать экземпляр класса bytearray, конструктор которого принимает в качестве аргументов произвольную строку и кодировку.

Приведенный ниже код:
s = 'Beegeek'
byte_array = bytearray(s, encoding='utf-8')

print(byte_array)
print(type(byte_array))


выводит:
bytearray(b'Beegeek')
<class 'bytearray'>

📎Объектам типа bytearray, как и объектам типа bytes, доступны почти все методы обычных строк (тип str). Однако байтовые массивы, будучи изменяемыми, поддерживают и списочные методы (тип list).

Приведенный ниже код:
s = 'Beegeek'
byte_array = bytearray(s, encoding='utf-8')

byte_array = byte_array.upper()
print(byte_array)
byte_array.extend(b'beegeek')
print(byte_array)


выводит:
bytearray(b'BEEGEEK')
bytearray(b'BEEGEEKbeegeek')

😉 Работа с объектами типа bytes и bytearray может быть выгодной с точки зрения памяти. Графическое представление символов в обычной строке часто занимает гораздо больше памяти, чем их байтовое представление.

Почитать подробнее о типе bytearray можно по ссылке.

Ставьте реакцию:

🔥 — если знали о типе bytearray
👀 — если узнали о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
👀70🔥19👍932🥰21
Друзья, сегодня поговорим о строковых константах встроенного в Python модуля string. 😌

🟪Нередко встречается ситуация, когда для решения задачи нам требуется определенный набор строковых символов. Например, когда необходимо проверить символы строки на принадлежность к цифрам, буквам английского алфавита или знакам препинания. Решить такую задачу можно с помощью:

🟣строковых методов isdigit(), isalpha() и других
🟣таблицы символов Unicode и функции ord()
🟣регулярных выражений (встроенный модуль re)

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

Приведенный ниже код:
import string

print(string.digits)
print(string.ascii_letters)
print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.punctuation)


выводит:
0123456789
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

😉 Помимо приведенных строковых констант, модуль string содержит и другие строковые константы, а также несколько полезных инструментов для работы со строками. Почитать подробно про возможности этого модуля можно в документации по ссылке.

Ставьте реакцию:

🔥 — если знали о строковых константах модуля string
👀 — если узнали о них впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #string
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥99👀82👍1221🎉11
Друзья, сегодня поговорим о том, что означает ошибка TypeError: <type> object is not iterable.

Данная ошибка возникает при попытке проитерировать объект, который не является итерируемым.

😳 Где же мы ошиблись в нашей программе?

Дело в том, что мы пытаемся перебрать в цикле for длину списка numbers — целое число, полученное в результате вызова функции len():

for i in len(numbers):


Целые числа (тип int) не являются итерируемыми объектами, поэтому при выполнении программы возникает ошибка TypeError: 'int' object is not iterable.

😌 Для того чтобы исправить ошибку в нашем коде, необходимо использовать функцию range(), которая возвращает итерируемый объект типа range.

Приведенный ниже код:

numbers = [4, 1, 5, 3, 2]
total = 0

for i in range(len(numbers)):
number = numbers[i]
if number % 2:
total += number

print(total)


выводит 9.

Ставьте реакцию:

😎 — если сразу нашли ошибку
👀 — если ошибку отыскать не удалось

#python #полезныйматериал #чтоозначаетошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
😎109👀86👍16🔥32👏2😁2🤩1
Друзья, в октябре этого года выходит версия Python π 3.14. Хотим рассказать о том, что в ней нового! 😎

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

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

Приведенный ниже код:
s = set()
seq = [1, 2, 3]
s.add(seq)


в Python 3.13 приводит к возбуждению исключения:
 TypeError: unhashable type: 'list'


в Python 3.14 приводит к возбуждению исключения:
 TypeError: cannot use 'list' as a set element (unhashable type: 'list')


Аннотации больше не вычисляются немедленно. Это происходит по мере необходимости с помощью специальных функций. Такое изменение призвано сделать работу с аннотациями более быстрой и удобной.

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

При обработке нескольких типов исключений в одном блоке except убрали необходимость заключать исключения в скобки.

Приведенный ниже код:
try:
raise ValueError
except TypeError, ValueError:
print(‘Исключение обработано’)


в Python 3.13 приводит к возбуждению исключения:
SyntaxError: multiple exception types must be parenthesized


в то время как в Python 3.14 выводит:
Исключение обработано


При использовании в блоке finally одного из операторов return, break или continue теперь всплывает предупреждение SyntaxWarning.

Появится новый вид строк — t-строки. В отличие от f-строк, которые сразу подставляют значения в соответствующие заполнители, t-строки хранят их отдельно и позволяют изменять в процессе формирования строки. Этот вид строк создан с целью обеспечения большей безопасности, например, при формировании HTML-кода или SQL-запросов.

Было внесено и множество других изменений, как крупных, так и не очень:

🟢 в новой версии модули unittest и calendar научились выводить цветной текст
🟢 появился параметр strict у функции map(), который может запретить обрабатывать коллекции разного размера
🟢 был улучшен экспериментальный режим без GIL
🟢 значительно обновлен Python C API

Ознакомиться со всеми изменениями Python 3.14 можно в документации по ссылке.

Ставьте реакцию:

🔥 — если любите накатывать обновления сразу после выхода
👀 — если ждете, пока выловят все ошибки

#поколениеpython #python #python314
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥133👀89169👍553
Друзья, давайте обсудим, что означает ошибка IndexError: list index out of range. 😎

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

Где же ошибка в нашей программе?

Мы одновременно итерируем список в цикле for и изменяем его содержимое.

Цикл находит длину списка один раз перед первой итерацией и запоминает ее. Во время работы цикла мы удаляем элементы списка, и его фактическая длина уменьшается. Однако цикл отрабатывает количество итераций, равное исходной длине списка. Это приводит к тому, что на одной из итераций мы обращаемся к списку по индексу, значение которого больше текущей длины. В результате возникает ошибка IndexError: list index out of range.

‼️‼️‼️❗️ Не изменяйте список во время итераций по нему: это антипаттерн, который может привести к непредсказуемому поведению программы и ошибкам.

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

Приведенный ниже код:
numbers = [num for num in range(9) if num % 2]

print(numbers)

выводит [1, 3, 5, 7].

Ставьте реакцию:

😎 — если сразу нашли ошибку в коде
👀 — если ошибку отыскать не удалось

#python #полезныйматериал #чтоозначаетошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
1😎68🔥18👀186👨‍💻543👍1🌚1💯11