Zen of Python
20.1K subscribers
1.21K photos
161 videos
32 files
3.16K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Как проитерировать разномастный список «по атомам»

Если у нас есть список, содержащий объекты разного типа — строки, списки, словари, то превратить этот набор в перечень «неделимых» элементов — букв и чисел, поможет модуль chain библиотеки itertools:

from itertools import chain

chained = chain('ab', [33])
next(chained) # a
next(chained) # b
next(chained) # 33

Какие еще фишки itertools вы знаете? Поделитесь в комментариях.

#лучшиепрактики
👍163
Что делать, если код на Python «замораживается»

Назвали 5 способов борьбы с заморозкой кода. Среди них рефакторинг и профилирование кода, запуск на JIT. Полный список в этой статье.

А какие еще методы разморозки вы применяете? Поделитесь в комментариях.

Анонс

#карьера
👍6🥰1
Dino Game своими руками

Многие из нас играли в бегающего динозаврика в Google Chrome, когда сети нет.

В своей статье Adones Evangelista рассказал, как написать точно такую же мини-игру на Python, используя библиотеки pygame и random.

#pygame #random
👍12👎2💩2
Counter: подсчёт числа элементов в списке

Помимо способности collections.Counter() понимать, что именно в строке нужно подсчитать:

from collections import Counter

Counter("mississippi")
>>> Counter({'i': 4, 's': 4, 'p': 2, 'm': 1})

в случае со списком слов модуль автоматически рассчитает, как часто встречается тот или иной элемент:

party_list = ["Alice", "Bob", "Alice", "Eve", "Bob", "Eve", "Alice"]
print(Counter(party_list))
>>> Counter({'Alice': 3, 'Bob': 2, 'Eve': 2})

#лучшиепрактики
👍162
Эффективный способ указывать путь к файлам

С помощью библиотеки pathlib вы можете сократить длину кода, задав переменную «домашний путь» (home):

from pathlib import Path

home = Path.home()
file = home / "treasure_map.txt"
file.touch()
print(f"Ваш файл злесь: {file}")

#лучшиепрактики
🔥18🤨7👍3🤔1
Почему Python не используется для разработки больших игр

Мы знаем, какими преимуществами обладает этот язык, но почему же его не используют для разработки полноценных игр? Среди недостатков, вытолкнувших ЯП с рынка GameDev, числятся:

- низкая совместимость с игровыми движками и языками программирования;
- нельзя создать собственный игровой движок;
- ограниченное количество игровых библиотек;
- ограниченный функционал для мобильных игр.

#факты
💩15🤔4
SQL_Pandas.pdf
515.4 KB
Шпаргалка SQL → Pandas

— выбрать один столбец или несколько из них;
— фильтрация;
— выбор уникальных значений по столбцу;
— подсчет числа значений;
— перечисление названий столбцов и т.д.

#обучение
👍10
Топ реальных историй про первую работу: как начиналась карьера в IT у наших читателей

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

Делимся лучшими реальными историями про первую работу:
Как таксист в тяжёлой депрессии стал Python-разработчиком

С завода на завод. Как слесарь стал программистом всего за 8 месяцев

Как пройти путь от галеры в Новосибирске до релокейта на Филиппины

Как стать Golang-разработчиком и получить оффер на 100 000 рублей в 20 лет

Как студент из Красноярска стал фронтенд-разработчиком

#карьера #работа
🔥6💩4👍1
Поиск в Google на Python

Библиотека googlesearch-python частично избавляет от необходимости создавать сложных пауков, имитирующих действия живого человека на selenium и позволяет тонко настраивать результаты поиска: количество, язык, подробность ответа (заголовок, URL, описание).

pip install googlesearch-python

from googlesearch import search
search("Поисковый запрос", advanced=True)

>>>
# - title
# - url
# - description

#лучшиепрактики
5👍1
Слияние словарей с double asterisk (**)

Чтобы лаконично и экономично с точки зрения памяти объединить два словаря, используйте оператор двойной звездочки:

d1 = {'name': 'Александр', 'age': 25}
d2 = {'name': 'Александр', 'city': 'Санкт-Петербург'}
merged_dict = {**d1, **d2}

>>> {'name': 'Александр', 'age': 25, 'city': 'Санкт-Петербург''}

#лучшиепрактики
👍29💩5
Railway.app: сервер с бесплатным пробным тарифом

Чтобы не мучаться с серверами и портами, а также деплоить приложения из GitHub-репозитория и прочих источников можно на railway.app. Основное преимущество — выделенные бесплатные, пусть и скромные ресурсы. В trial-версии вам предоставят:

— 512 MB RAM;
— 1 Гб места;
— 5 демо-долларов или 500 часов работы;
— Поддержка на уровне Discord-чата.

#VPS
👍8👎1
Автоматическая отправка сообщения в WhatsApp

Наконец отложенные сообщения в WhatsApp! Библиотека PyWhatKit помогает отправить сообщение по времени.

import pywhatkit

# Отправить сообщение в 13:30
pywhatkit.sendwhatmsg("+910123456789", "Привет", 13, 30)

Библиотека умеет еще много интересного: от преобразования картинки в ASCII-изображение до отправки мейлов.

#лучшиепрактики
👍192🤡2
IDE для питонистов с хорошим UI / UX

Составили подборку из 5 хороших IDE для программирования на Python с удобной и понятной средой, которые помогают писать код, а не мешают.

#лучшиепрактики
👎7👍2🤔21
Как получить расширенную информацию о картинке

Увидеть подробные метаданные изображения (с появлением цифровой фотографии это назвали EXIF): дату создания, тип камеры, и даже факт разворота позволяет утилита exifread:

import exifread
from PIL import Image
import logging

def _read_img_and_correct_exif_orientation(path):
im = Image.open(path)
tags = {}
with open(path, 'rb') as f:
tags = exifread.process_file(f, details=False)
if "Image Orientation" in tags.keys():
if 4 in val:
logging.debug("Изображение отзеркалено.")
im = im.transpose(Image.FLIP_TOP_BOTTOM)

#лучшиепрактики
👍9
​Кстати, у нас на сайте вы можете подписаться только на интересные вам теги и отслеживать самые свежие новости и полезные статьи по этой теме.

Вот, например:
— Веб-разработка: https://tproger.ru/tag/web/
— Нейросети: https://tproger.ru/tag/neural-network/
— И геймдев: https://tproger.ru/tag/gamedev/

А ещё можно подписаться на годноту по конкретному языку:
— Python: https://tproger.ru/tag/python/
— JavaScript: https://tproger.ru/tag/javascript/
— C++: https://tproger.ru/tag/cpp/

Посмотрите все теги и выберите только те, которые интересны вам!
👍51💩1
Забытые способы указать число знаков после запятой

Помимо привычного символа f, есть еще способы форматировать числа при выводе: e и % (знак процента).

{1.23456:10.3f} # '1.235' – до тысячных (три знака)
{1.23456:10.3e} # '1.235e+00' – равно 1.235, то есть умножено на 10 в нулевой степени (на единицу)
{1.23456:10.3%} # '123.456%' – тоже до тысячных, но для процентов
5👍1
itertools.compress: удобный способ фильтрации данных

В своем уроке UProger описывает, как фильтровать первый список leaders на основе вспомогательного списка selector.

#лучшиепрактики
👍8
Конструкторы datetime

Модуль datetime предоставляет классы «Дата» <D>, «Время» <T>, «Временной штамп» <DT> и «Временная дельта» <TD>.

<D> = date(year, month, day) # Only accepts valid dates from 1 to 9999 AD.
<T> = time(hour=0, minute=0, second=0) # Also: `microsecond=0, tzinfo=None, fold=0`.
<DT> = datetime(year, month, day, hour=0) # Also: `minute=0, second=0, microsecond=0, …`.
<TD> = timedelta(weeks=0, days=0, hours=0) # Also: `minutes=0, seconds=0, microseconds=0`.

Как получить значение текущего времени в разных форматах?

D/DT.today() # Текущая локальная дата (NB! в часовом поясе, где развернута машина)
DT.utcnow() # Текущие дата и время без часового пояса
DT.now(<tzinfo>) # Текущие дата и время с часовым поясом

#факты
👍5
Splat-оператор

Splat (одна звездочка) расширяет коллекцию до позиционных аргументов, а splatty-splat (две звездочки) расширяют словарь до именованных аргументов:

Этот код:
args = (1, 2)
kwargs = {'x': 3, 'y': 4, 'z': 5}
func(*args, **kwargs)

Равнозначен следующему:
func(1, 2, x=3, y=4, z=5)

#факты
👍122
Забавный автоперевод документации REST

"Упдейтшитпропертиесрекуест", "ОбновлениеНамедРангерекуест", "Аддшитрекуест" и прочих неведомых зверей предлагает использовать Google при обращении с API Таблиц. Забавное временное явление можно увидеть в русскоязычной версии документации.

#факты
😁12👍2