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

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

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

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

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

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
VS Code, python, контейнеры — как обуздать эту триаду и разрабатывать внутри контейнера

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

Но оказывается, что навороченные редакторы кода ещё и настроить правильно нужно. А чтобы полностью настроить среду под себя, иногда уходит очень приличное количество времени.

Это небольшой туториал о настройке VS Code для работы с Python. Просто, по делу, а если планируете работать с контейнерами, то вам отдельно повезло: https://habr.com/ru/company/ruvds/blog/717110/

#vscode
👍212👎2💩2
Больше ботов богу ботов: создаём бота, использующего Яндекс.Диск

В этом гайде вы узнаете, как создать Telegram-бота на Python с помощью библиотеки aiogram. Вы подробно рассмотрите процесс создания бота, начиная от регистрации в Telegram, заканчивая разбором программного кода:

https://habr.com/ru/post/720130/

#бот #telegram
💩9👍6😁1
Кстати, про литкод: определяем ваш уровень решения LeetCode задач от 1 до 5

Недавно я уже писал про интересную статью, в которой рассмотрели решение одной из сложных задач с платформы. Напомню, что LeetCode — это своего рода тренажёр по всяким заковыристым алгоритмическим задачам для подготовки к техническим собеседованиям.

И вот ещё более интересная статья про реальный опыт с LeetCode и (внимание!) подготовке к интервью в FAANG подобные компании путём разбиения её на уровни.

Цифры местами грубые, утверждения субъективные, но очень советую к прочтению, если интересуетесь темой: https://habr.com/ru/post/713498/

#задачи
👍16
Если ещё не видели, делюсь большим питоном!

birp (борп) — большой русский питон, судя по всему, чей-то мемный проект, который позволяет писать код на русском, но всё ещё пользоваться всеми преимуществами Питона. Транслятор переводит не только ключевые слова, но и встроенные функции, типы, магические методы, а так же некоторые другие слова: https://github.com/evtn/birp

Например, код:
граница = целое(ввод("Введите верхнюю границу: "))

для число в диапазон(граница):
вывод(число)

Транслируется в:
bound = int(input("Введите верхнюю границу: "))

for number in range(bound):
print(number)

Если честно, даже не знаю, каким хэштегом помечать такие посты. Как думаете, как помечать такие посты, чтобы потом их можно было найти? #кек, #треш, #угар, #зверобой? Помогите придумать достойный тег в комментах, чтобы не терять годноту :)
😁34👍11💩10🤯2
Поздравляем с международным женским днём!

И делимся с вами несколькими хорошими материалами:

— Если не знали, до 1984 года женщин-программистов было больше, чем мужчин. Интересное исследование и краткий исторический экскурс про вклад женщин в IT: https://mel.fm/deti/shkolniki/987324-women_programming

— Минутка ностальгии. Женщины в Bell Labs 1960-х годов — в фотографиях на фоне огромных ЭВМ тех времён: https://tproger.ru/articles/women-of-bell-labs-in-the-1960s/

— Как относятся к девушкам-программистам сейчас, и сложно ли девушке устроиться на работу в IT-отрасль, особенно если она хочет быть именно программистом: https://tproger.ru/experts/36/

#история
👍145😱2
Ну наконец-то в электромобили завезли поддержку питона.

Или это не то?
😁53🔥9👍3💩1😭1
​​​​Самые популярные вопросы на собеседовании: «В чем разница между методами экземпляра, класса и статическими методами в Python?»

Методы экземпляра: принимают параметр self и относятся к определенному экземпляру класса.

Статические методы: используют декоратор @staticmethod, не связаны с конкретным экземпляром и являются автономными (атрибуты класса или экземпляра не изменяются).

Проиллюстрируем разницу на вымышленном классе CoffeeShop:
class CoffeeShop:
specialty = 'espresso'

def __init__(self, coffee_price):
self.coffee_price = coffee_price

# instance method
def make_coffee(self):
print(f'Making {self.specialty} for ${self.coffee_price}')

# static method
@staticmethod
def check_weather():
print('Its sunny')

# class method
@classmethod
def change_specialty(cls, specialty):
cls.specialty = specialty
print(f'Specialty changed to {specialty}')

У класса CoffeeShop есть атрибут specialty (фирменный напиток), установленный по умолчанию в значение 'espresso'. Каждый экземпляр CoffeeShop инициализируется с атрибутом coffee_price. У него также три метода: метод экземпляра, статический метод и метод класса.

Давайте инициализируем экземпляр с атрибутом coffee_price, равным 5. Затем вызовем метод экземпляра make_coffee:
coffee_shop = CoffeeShop('5')
coffee_shop.make_coffee()
#=> Making espresso for $5

Теперь вызовем статический метод. Статические методы не могут изменять состояние класса или экземпляра, поэтому обычно используются для служебных функций, например, сложения двух чисел. Наши проверяют погоду. Говорят, что солнечно:
coffee_shop.check_weather()
#=> Its sunny

Теперь используем метод класса для изменения фирменного напитка (specialty), а затем сделаем кофе (make_coffee):
coffee_shop.change_specialty('drip coffee')
#=> Specialty changed to drip coffee

coffee_shop.make_coffee()
#=> Making drip coffee for $5

Обратите внимание, что make_coffee раньше делал эспрессо, а теперь заваривает капельную кофеварку (drip coffee).
👍31
👍4👎3
Каким будет результат выполнения кода выше?
Anonymous Quiz
3%
1 1
7%
1 0
46%
3 1
43%
3 0
👍15
Объяснение:

Значение varTwo передаётся в функцию func(). varOne[1, 2, 3] передаётся туда же как ещё одно значение

При этом внутри функции arr[0] = 0 изменяет значение по индексу [0] в списке. Отсюда следует, что varOne = [0,2,3]
👍8🤔4
​​​​Самые популярные вопросы на собеседовании: «В чём разница между func и func()?»

Это совсем несложный вопрос, но многих новичков он ставит в ступор. На самом деле вопрос нужен только для того, чтобы проверить ваше понимание, что все функции в Python также являются объектами:
def func():
print('Im a function')

func
#=> function __main__.func>

func()
#=> Im a function

func — это представляющий функцию объект, который можно назначить переменной или передать другой функции. А вот функция func() уже вызывает функцию и возвращает результат. Вот и всё :)

#собеседование
👍241
Большая подборка книг по Python от сообщества

В подборке есть книги как для новичков, так и для опытных специалистов. Репозиторий постоянно обновляется, так что велик шанс найти что-нибудь свеженькое.

https://github.com/pamoroso/free-python-books

#книги #подборка
👍11
Cоздаём свою канбан-доску на Django, DRF и Alpine.js

Наверняка вы уже работали с канбан-досками? Это сервисы типа Jira или Trello, они помогают здорово структурировать и мониторить рабочие процессы. А особенно они полезны, когда задачи состоят из кучи этапов, например, согласования, выполнения, ревью и продакшена.

А почему нам не сделать свою канбан-доску с блекджеком, так сказать, и всем прилегающим? Вот отличная статья, которая поможет разработать собственную канбан-доску и развернуть её на облачном сервере:

https://habr.com/ru/company/selectel/blog/721022/

#django #петпроект
👍10🤡4
5 полезных, но малоизвестных библиотек для Python

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

Но есть несколько очень крутых, но пока малоизвестных библиотек, которые могут оказаться очень полезными.

И вот 5 самых интересных из них:
Funcy содержит более 100 полезных методов и декораторов, собранных в одной библиотеке.
JsonObject — удобная библиотека для быстрого преобразования json в объекты Python.
Pdir2 — отличная библиотека для замены работы со стандартным dir().
NetworkX — это очень большая и удобная библиотека для Python с множеством встроенных функций для работы с графами и их выводом.
You-get — удобный инструмент для скачивания видео, фото и аудио файлов с большинства популярных платформ.

А вот статья, в которой на примерах показали, как с ними работать и чем они могут быть полезны: https://habr.com/ru/company/ruvds/blog/721834/

Берите на заметку, чтобы через полгода-года смело сказать, что вы юзали их, пока это ещё не было мейнстримом.

#подборка #библиотека
👍131💩1
Forwarded from Типичный программист
OpenAI представила GPT-4 и расскажет о ней подробнее на презентации в 23:00 по мск

Как и обещали, разработчики Microsoft и OpenAI, в целом улучшили GPT-4 и внедрили мультимодальные модели. Теперь GPT-4 может взаимодействовать ещё и через изображения (пример, на 1 скриншоте), звуки и видео. А ещё она свободно общается на разных языках, гораздо лучше сдаёт экзамены и лучше пишет о сложных вопросах, а не только общих темах.

Рассказываем, что ещё нового в новой модели от OpenAI, как получить к ней доступ и где посмотреть презентацию: https://tproger.ru/articles/openai-predstavila-gpt-4-chto-novogo-i-kak-poprobovat-novinku/

#нейросети #openai #microsoft
👍18👎1
Первый тест фичи:
😁706👎1
Дайджест Python #5: как сделать свой Copilot и работать с данными в Pandas

Собрали свежий дайджест из лучших материалов по Python.

В нём вы узнайте, как написать свой аналог GitHub Copilot без знаний об искусственном интеллекте, как работать с данными и памятью в Pandas и как написать нейросеть, которая сможет самостоятельно распознавать объекты.

#python #нейросети
5👎1🤮1
​​​​​Самые популярные вопросы на собеседовании: «Как работает функция map?»

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

Но у for есть несколько недостатков, которых можно избежать, используя map():

1. Поскольку map() написан на C и сильно оптимизирован, его внутренний подразумеваемый цикл более эффективен, чем обычный цикл for.

2. Второе преимущество использования map() — потребление памяти. С помощью for вам нужно сохранить весь список. А map() вы получаете элементы по запросу, и только один элемент находится в памяти в данный момент.

То есть map() полезен, когда вам нужно применить функцию преобразования к каждому элементу в коллекции или в массиве и преобразовать их в новый массив. Она возвращает объект (итератор), который перебирает значения, применяя функцию к каждому элементу. В случае необходимости объект можно преобразовать в список:

def add_three(x):
return x + 3
li = [1,2,3]
list(map(add_three, li))
#=> [4, 5, 6]

Например, здесь к каждому элементу в списке мы добавляем число 3.

#собеседование
👍41🔥1