#python python... PYTHON 🔛 🚀
11 subscribers
914 photos
7 videos
158 files
1.54K links
Download Telegram
Forwarded from Python Community
⚡️ Замеряем время выполнения программы

Многие новички используют time или встроенные в ОС приложения, но это не верно. Лучше использовать timeit, поскольку он может более точно рассчитать, сколько занимает выполнение кода, независимо от ОС.

Он довольно прост в использовании. Всего пару строк, и вы можете доказать, что код админа медленнее вашего решения :)

timeit.timeit(code, setup='', timer, number=1_000_000) — запускает код number раз. Но перед этим выполняет строку setup, которая не входит в время, измеряемое таймером. Эта основная функция больше вам не понадобится.

Если вам лень запускать IDE, можете воспользоваться терминалом, вписав python3 -m timeit "print('Hello world')".

А если вам стало интересно, то можете посетить страницу документации.

#миниурок #timeit
Forwarded from Python Community
⚡️ Продолжаем рассматривать модуль itertools

Думаю, стоит вам ещё рассказать про этот модуль и интересные функции. Начнём!

zip_longest(a, b, fill_value) — очень удобный итератор. Работает также как и zip, но если длина списков разная, заполняет их fill_value.

takewhile(func, seq) — возвращает значения из seq, пока func не вернёт False.

chain(a, b,...) — соединяет два и более итерируемых объектов в один.

product(a, b...) — декартово произведение итерируемых объектов.

#миниурок #itertools
Forwarded from Python School
Автоматизация и скриптинг

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

Не беспокойтесь, питон тебя прикроет. Есть множество вещей, которые вы можете автоматизировать всего за 4-5 строк кода. От установки заданий cron и напоминаний до загрузки ваших любимых видео на YouTube, вы можете сделать все это с помощью нескольких строк в python.
Forwarded from Python School
Аннотации типов

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

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

С версии Python 3.5 при определении функции можно добавлять аннотации типов

Также они позволяют использовать инструменты для проверки типов, чтобы отлавливать ошибки TypeError.
Forwarded from Python School
Data classes

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

• возврат нескольких значений или словарей;
• класс данных требует минимального количества кода;
• возможность сравнения классов данных;
• возможность распечатать класс данных для отладки при помощи repr;
• снижение вероятности ошибок в связи с требованием класса данных type hints
Мы начинаем публиковать лекции летних школ Академии Яндекса на нашем YouTube! ⚡️

Сегодня — курс лекций Школы бэкенд-разработки 2021 для тех, кто пишет на Python. Скоро поделимся записями по фронтенду, мобильной разработке, менеджменту и дизайну. Ловите ссылку на плейлист: https://clck.ru/YVduf

Авторы этих видео — опытные разработчики Яндекса. Лекции рассчитаны на тех, кто уже знает основы Python, хочет углубить и систематизировать знания. Из курса вы узнаете тонкости построения архитектуры и инфраструктуры, подходы к тестированию, важнейшие метрики и алгоритмы в бэкенд-разработки, основы асинхронного программирования и работы с legaсy-кодом.

В рамках летних школ студенты не только слушали лекции, но и погружались в промышленную разработку, делали реальные проекты бок о бок с менторами и ребятами других направлений. Чтобы не пропустить новый набор и поучаствовать в следующих школах, оставляйте заявку на сайте Академии: https://clck.ru/YVdB3
Forwarded from Python Academy
Делаем планировщик задач 

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

Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще schedule не требует внешних зависимостей и сам в целом легковесный. 

Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах. 

#schedule
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-объекты и экземпляры любых пользовательских классов.