#python python... PYTHON 🔛 🚀
11 subscribers
914 photos
7 videos
158 files
1.54K links
Download Telegram
Forwarded from Python Academy
Отсутствующие ключи в словаре

При обращении по отсутствующему ключу в словаре мы получим исключение KeyError. Но мы можем переопределить это поведение.

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

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

#dict
Forwarded from Python Academy
Работаем с файловыми путями

В стандартной библиотеке есть максимально удобный пакет pathlib для простой работы с файловыми путями.

Для представления пути к файлу есть класс Path, с объектами которого уже можно производить операции. Например, методы exists() и is_dir() проверяют, существует ли файл и является ли он директорией.

Но самой классной фичей является замена os.path.join() на более удобный и элегантный вариант с использованием слэшей, как показано на картинке.

Итого, пакет pathlib может стать частичной заменой os в некоторых случаях при работе с файловыми путями.

#pathlib
Считаете Python верхом совершенства? А как насчет альтернативы - высокопроизводительного языка Julia? Некоторые из возможностей Julia явно не помешали бы старому доброму Python.

https://nuancesprog.ru/p/14342/

@nuancesprog #Julia #Python
Что может заставить программиста, который 10 лет предпочитал Python другим компьютерным языкам, перейти на Rust? Узнайте о 5 проблемах Python и о том, как Rust решил эти проблемы.

https://nuancesprog.ru/p/14331/

@nuancesprog #Rust #Python
Forwarded from # pip install
Главный секрет операторов match/case в Python

Не так давно увидела свет версия языка пайтон 3.10. В ней был добавлен pattern matching statement (оператор сопоставления с шаблонами). Как гласит официальное описание этого оператора в PEP622, разработчики в большей мере вдохновлялись наработками таких языков как: Scala, Erlang, Rust.

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

Подробнее: https://habr.com/ru/post/585518/
Forwarded from Python School
Data classes

Начиная с версии 3.7, Python поставляется с классами данных. У них есть несколько преимуществ по сравнению с обычными классами или другими альтернативами:

• возврат нескольких значений или словарей;
• класс данных требует минимального количества кода;
• возможность сравнения классов данных;
• возможность распечатать класс данных для отладки при помощи repr;
• снижение вероятности ошибок в связи с требованием класса данных type hints
Forwarded from Python School
xkcd

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

Конечно, чувство юмора не заканчивается на документации.
Forwarded from Data Ninja (Dmitriy)
Хотел написать про DWH, но опять пишу про Питон :)

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

class Cat():

def say(self):
print('Meow')

class Dog():

def say(self):
print('Gav')

class CatDog(Cat,Dog):
pass

class DogCat(Dog,Cat):
pass

muteDog=CatDog()
muteDog.say()
>> Meow

muteCat=DogCat()
muteCat.say()
>> Gav

Ну и конечно посмотрим лично как Питон разрешил эту проблему:

CatDog.__mro__
>> (__main__.CatDog, __main__.Cat, __main__.Dog, object)

python
DogCat.__mro__
>> (__main__.DogCat, __main__.Dog, __main__.Cat, object)

#собеседование
Forwarded from Data Ninja (dmitriy)
Люблю понимать как работает та или иная технология, долгое количество времени принимал JOIN в SQL как данность, не задумываясь что же происходит внутри, а на самом деле внутри не происходит ничего сверхъестественного. Существует всего 3 основных алгоритма объединения данных

Алгоритм вложенными циклами. Сложность N*N
a = [1, 2, 3, 4, 5]
b = [2, 3, 4, 5, 6]

_ = list()

for i in a:
for j in b:
if i == j:
print(i)

Алгоритм sort join, для отсортированных таблиц. Сложность N*LOG(N) для неотсортированных таблиц и N для отсортированных

a = [1, 2, 3, 4, 5]
b = [2, 3, 4, 5, 6]

i = 0
j = 0
while i != len(a) and j != len(b):
if a[i] < b[j]:
i += 1
elif a[i] == b[j]:
print(a[i], b[j])
i += 1
j += 1
else:
j += 1

Алгоритм hash join. Сложность N. Используем set map в случае с питоном.

a = [1, 2, 3, 4, 5]
b = set([2, 3, 4, 5, 6])

for i in a:
if i in b:
print(i)

#собеседование
Forwarded from Data Ninja
Часто встречаю путаницу у людей в связи с тем что такое итератор в Python. Например многие по ошибке говорят что всеми нами любимый range(N) это итератор, отнюдь.

>>> next(range(5))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'range' object is not an iterator

В питоне существует 3 типа итерируемых объекта, если их так можно назвать. Iterable, Iterator, Generator.

Iterator это объект у которого определены два метода next, iter. Iterable это всё у чего есть метод iter, и что вернет Iterator. Generator это всё что использует yield вместо return.

Собственно если мы исполним код,

for i in range(5): 
print(i)

Будет аналогично такому псевдокоду

rn = iter(range(5))
while True:
next(rn)

#собеседование
Forwarded from Python School
YAML (ч.1)

YAML означает «YAML — не язык разметки» («YAML Ain’t Markup Language»). Это язык форматирования данных, являющийся надмножеством JSON.

В отличие от JSON, YAML может хранить более сложные объекты и ссылаться на собственные элементы.
Forwarded from Python School
YAML (ч.2)

Также там можно писать комментарии, что делает YAML подходящим для конфигурационных файлов.

Модуль PyYAML позволяет использовать YAML в Python.

PyYAML позволяет хранить любые Python-объекты и экземпляры любых пользовательских классов.
Forwarded from Python School
Queue (ч.1)

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

Он позволяет реализовывать такую структуру данных, как очередь. Очереди позволяют добавлять и извлекать элементы согласно определённому правилу.
Forwarded from Python Community
⚡️ Что такое __name__

Заглянув в большинство скриптов вы можете увидеть строку по типу __name__ == "__main__". Многие новички не понимают, зачем её добавлять, если и так всё работает.

Представим, что вы написали небольшой скрипт, который выводит hello world при запуске. А другой программист захотел импортировать ваш модуль, поскольку там была функция print_hello().

Но вместе с импортом он получил ненужную hello world в терминал. Почему так случилось? Потому что python-код также выполняется во время импорта. Чтобы этого избежать, используют __name__.

При импорте __name__ получает название модуля, а при прямом запуске (python3 script.py) его значение будет __main__. Подробнее вы, как обычно, можете почитать тут.

#теория
Forwarded from HABR FEED + OPENNET
5 реально применимых пет-проектов на Python
https://habr.com/ru/post/587260/?utm_source=habrahabr&utm_medium=rss&utm_campaign=587260
Tags: Python, Программирование, Карьера в IT-индустрии, Управление проектами, python, pet-project, pet-проекты, полезный софт, самообразование, примеры, разработка, project, саморазвитие, junior
Author artemmokinn #habr
Forwarded from Python Community
⚡️ Что такое __all__ ?

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

Думаю, в нескольких ваших скриптах встречается строка по типу from package import *, которая импортирует всё из модуля. Но ведь функций/классов может быть намного больше, чем вы думаете.

Чтобы не нагружать вашу программу ненужными объектами разработчики вписывают в __all__ имена доступных типов.

Всё элементарно, но чтобы почитать об этом подробнее, можете заглянуть на сайт документации.

#теория
Forwarded from Python Community
⚡️ Добавляем время в программу

Модуль time позволяет замерять время выполнения кода, может заморозить программу, а также позволяет узнать текущее время.

Первую задачу выполняет функция time(), которая возвращает время в секундах. Для заморозки приложения используют команду sleep(seconds).

А вот выводом времени занимается метод strftime(), который выводит структуру, полученную, например, из gmtime() в определённом формате.

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

#миниурок #time
Forwarded from About Python [ru]
Применяли ли Вы блокчейн как API?

Answer - https://telegra.ph/Answer-10-15-2
Forwarded from About Python [ru]
Применяли ли Вы в разработке паттерн Адаптер?

Answer - https://telegra.ph/Answer-09-30-4