👏 Вышел Mypy 1.8 — новая версия статического анализатора типов для Python
В Mypy 1.8 добавлены некоторые новые функции, улучшена производительность и исправлены баги.
Вот что было улучшено:
🔸 сообщения об ошибках для super проверок, добавлено больше тестов.
🔸 проверки типов: изменения в обработке isinstance, дополнительные условия для @final и TypedDict.
🔸 Stubtest: лучшая обработка нестандартных значений по умолчанию, поддержка декоратора @type_check_only.
🧑💻Прочесть обо всех изменениях можно здесь
В Mypy 1.8 добавлены некоторые новые функции, улучшена производительность и исправлены баги.
Вот что было улучшено:
🔸 сообщения об ошибках для super проверок, добавлено больше тестов.
🔸 проверки типов: изменения в обработке isinstance, дополнительные условия для @final и TypedDict.
🔸 Stubtest: лучшая обработка нестандартных значений по умолчанию, поддержка декоратора @type_check_only.
🧑💻Прочесть обо всех изменениях можно здесь
👍12
🤓 Нашли репозиторий с большим количеством шпаргалок по Python на русском языке
Есть PDF-ки по:
▫️типам данных;
▫️функциям;
▫️декораторам;
▫️итераторам и генераторам;
▫️различным модулям;
▫️ООП и многому другому.
🔗Изучить можно по этой ссылке
Есть PDF-ки по:
▫️типам данных;
▫️функциям;
▫️декораторам;
▫️итераторам и генераторам;
▫️различным модулям;
▫️ООП и многому другому.
🔗Изучить можно по этой ссылке
❤24🔥9👍4
🐍 Что делает класс ChainMap() модуля collections
Он позволяет объединять несколько словарей так, чтобы их можно было рассматривать как единое целое.
✏️Лучше всего посмотреть на примере:
Экземпляр ChainMap не копирует входные словари, а хранит ссылки на них. Поэтому он может быть более эффективным по памяти по сравнению с другими методами, которые создают копии словарей.
✏️Обновление или вставка в ChainMap затрагивают только первый входной словарь. Снова посмотрим на примере:
#код
Он позволяет объединять несколько словарей так, чтобы их можно было рассматривать как единое целое.
✏️Лучше всего посмотреть на примере:
d1 = dict(a=1, b=3)
d2 = dict(a=2, b=4, c=6)
from collections import ChainMap
chain = ChainMap(d1, d2)
print(chain['a']) # -> 1
print(chain['c']) # -> 6
Экземпляр ChainMap не копирует входные словари, а хранит ссылки на них. Поэтому он может быть более эффективным по памяти по сравнению с другими методами, которые создают копии словарей.
✏️Обновление или вставка в ChainMap затрагивают только первый входной словарь. Снова посмотрим на примере:
chain['c'] = -1
print(d1) # -> {'a': 1, 'b': 3, 'c': -1}
print(d2) # -> {'a': 2, 'b': 4, 'c': 6}
#код
👍23❤2
🪜 8 уровней использования конструкции match/case в Python
Начиная с Python 3.10 в языке есть структурное сопоставление с шаблоном (structural pattern matching). В новой статье на Medium приводится восемь примеров использования сопутствующей конструкции match/case: от элементарного до продвинутого.
☑️ Простое сопоставление шаблонным строкам
Например, можно избежать многократного использования условных конструкций:
☑️ Использование подчёркивания для остальных случаев
☑️ Комбинирование нескольких паттернов в один случай
Приведённый выше пример можно усложнить:
☑️ Использование оператора as, чтобы улучшить логирование
☑️ Cопоставление шаблонным кортежам и спискам
☑️ Сопоставление шаблонным словарям
☑️ Использование дополнительных условий
☑️ Сопоставление шаблонным классам
🔗Прочитать оригинал статьи можно по этой ссылке
Начиная с Python 3.10 в языке есть структурное сопоставление с шаблоном (structural pattern matching). В новой статье на Medium приводится восемь примеров использования сопутствующей конструкции match/case: от элементарного до продвинутого.
☑️ Простое сопоставление шаблонным строкам
Например, можно избежать многократного использования условных конструкций:
def handle_http_status(status_code):
match status_code:
case 200:
return "Success!"
case 400:
return "Bad Request"
print(handle_http_status(200)) # -> Success!
☑️ Использование подчёркивания для остальных случаев
def handle_http_status(status_code):
match status_code:
case 200:
return "Success!"
case 400:
return "Bad Request"
case _:
return "Unknown Status"
☑️ Комбинирование нескольких паттернов в один случай
Приведённый выше пример можно усложнить:
def handle_http_status(status_code):
match status_code:
case 200:
return "Success!"
case 400 | 401 | 403 | 404:
return "Client Error"
print(handle_http_status(404)) # -> Client Error
☑️ Использование оператора as, чтобы улучшить логирование
def handle_http_status(status_code):
match status_code:
case 200:
return "Success!"
case 400 | 401 | 403 | 404 as Err:
return f"Client Error:{Err}"
print(handle_http_status(404)) # -> Client Error:404
☑️ Cопоставление шаблонным кортежам и спискам
def execute_command(command):
match command:
case ("print", message):
print(f"{message}")
case ["save", filename, data]:
print(f"Saving {data} to {filename}")
case ("delete", filename):
print(f"Deleting {filename}")
case ('todo', *something):
print(f"To do: {' '.join(something)}")
case _:
print("Unknown Command")
execute_command(("print", "Hello, Yang Zhou!")) # -> Hello, Yang Zhou!
☑️ Сопоставление шаблонным словарям
def handle_user_action(action):
match action:
case {"type": "login", "username": user, "password": pw}:
return f"Login attempt by {user} with password {pw}"
case {"type": "logout", "username": user}:
return f"User {user} logged out"
case {"type": "signup", "username": user, "email": email}:
return f"New signup by {user} with email {email}"
case _:
return "Unknown action"
print(handle_user_action({"type": "login", "username": "Yang Zhou", "password": "123456"})) # -> Login attempt by Yang Zhou with password 123456
☑️ Использование дополнительных условий
def handle_user_op(action):
match action:
case "login" if user_not_logged_in():
return "User needs to log in"
case "login":
return "Already logged in"
case "logout":
return "Logging out"
case _:
return "Unknown action"
☑️ Сопоставление шаблонным классам
class Circle:
def __init__(self, radius):
self.radius = radius
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def process_shape(shape):
match shape:
case Circle(radius=r):
return f"Processing a circle with radius {r}"
case Rectangle(length=l, width=w):
return f"Processing a rectangle with length {l} and width {w}"
🔗Прочитать оригинал статьи можно по этой ссылке
👍50❤4
Мы продолжаем собирать ваши истории о смене профессии и трудоустройстве в IT, чтобы написать большую аналитическую статью.
👉Если вы еще не рассказывали о своем опыте, пройдите короткий опрос по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁11
🐍🧫 Создаём игру «Жизнь» Джона Конвея на Python
Напишем алгоритм эволюции клеточных автоматов и разработаем интерфейс командной строки (CLI) для взаимодействия с игрой.
👉Читать статью
Напишем алгоритм эволюции клеточных автоматов и разработаем интерфейс командной строки (CLI) для взаимодействия с игрой.
👉Читать статью
👍17😁2
🐍 У нас есть еженедельная email-рассылка, посвященная последним открытиям и тенденциям в мире Python.
В ней:
● Новые возможности в последних версиях Python
● Работа с базами данных и SQL в Python
● Веб-разработка на Django и Flask
● Машинное обучение и анализ данных с помощью Python
● Автоматизация и работа с API на Python
● Тестирование и отладка кода на Python
● Задачи для новичков с решениями
👉Подписаться👈
В ней:
● Новые возможности в последних версиях Python
● Работа с базами данных и SQL в Python
● Веб-разработка на Django и Flask
● Машинное обучение и анализ данных с помощью Python
● Автоматизация и работа с API на Python
● Тестирование и отладка кода на Python
● Задачи для новичков с решениями
👉Подписаться👈
❤🔥4👍2
p1i8awsivji51.jpeg
580.7 KB
✍️Небольшая шпаргалка по дебаггингу в Python
Вот алгоритм действий при ситуации, когда код не работает:
❔ Начните с вопроса: появляется ли ошибка при запуске скрипта?
✔️ Если да:
Посмотрите на тип ошибки. Вот основные:
🔤 AttributeError — возникает, когда вы пытаетесь вызвать метод не на том объекте;
🔤 SyntaxError — вы где-то ошиблись с синтаксисом;
🔤 NameError — используете имя, которое пока не определено;
🔤 TypeError — пытаетесь делать что-то с неподходящим по типу объектом;
🔤 IOErro — пытаетесь открыть файл, который не существует;
🔤 IndentationError — ошибка отступа;
🔤 KeyError — пытаетесь обратиться по ключу, которого нет в словаре.
✖️ Если нет:
Посмотрите, есть ли в коде циклы (петли) или условные выражения (if). Исходя из ответа на этот вопрос, проводите дальнейший анализ.
Вот алгоритм действий при ситуации, когда код не работает:
Посмотрите на тип ошибки. Вот основные:
Посмотрите, есть ли в коде циклы (петли) или условные выражения (if). Исходя из ответа на этот вопрос, проводите дальнейший анализ.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤2
🐍 Подборка инструментов для самостоятельного парсинга веб-страниц на Python
✅ Requests
Конечно же, нельзя не упомянуть эту библиотеку для выполнения HTTP-запросов. Сама по себе она не является инструментом для парсинга, но часто используется в сочетании с Beautiful Soup.
✅ Beautiful Soup
Библиотека предназначена для извлечения данных из веб-страниц. Она использует анализатор кода HTML и XML и даёт доступ к данным.
✅ Scrapy
Фреймворк для автоматического сбора структурированных данных из веб-страниц. В нём есть всё, что нужно, в том числе модуль для отправки HTTP-запросов и извлечения данных из HTML-страницы.
✅ PySpider
Ещё один фреймворк для веб-парсинга.
✅ Selenium
Инструмент автоматизации браузера. Позволяет написать программу, которая будет как человек открывать нужные веб-страницы и взаимодействовать с ними.
✅ Регулярные выражения, re
Также отметим, что регулярки могут пригодиться для поиска определённых шаблонов в тексте на сайте.
👇А какими полезными инструментами пользуетесь вы?
✅ Requests
Конечно же, нельзя не упомянуть эту библиотеку для выполнения HTTP-запросов. Сама по себе она не является инструментом для парсинга, но часто используется в сочетании с Beautiful Soup.
✅ Beautiful Soup
Библиотека предназначена для извлечения данных из веб-страниц. Она использует анализатор кода HTML и XML и даёт доступ к данным.
✅ Scrapy
Фреймворк для автоматического сбора структурированных данных из веб-страниц. В нём есть всё, что нужно, в том числе модуль для отправки HTTP-запросов и извлечения данных из HTML-страницы.
✅ PySpider
Ещё один фреймворк для веб-парсинга.
✅ Selenium
Инструмент автоматизации браузера. Позволяет написать программу, которая будет как человек открывать нужные веб-страницы и взаимодействовать с ними.
✅ Регулярные выражения, re
Также отметим, что регулярки могут пригодиться для поиска определённых шаблонов в тексте на сайте.
👇А какими полезными инструментами пользуетесь вы?
👍13❤7
❤5
🧠🧩 Зачем айтишнику психолог?
В современных реалиях все больше специалистов ИТ-индустрии обращаются к психологам, чтобы разобраться с эмоциональными проблемами. Рассмотрим некоторые распространенные запросы и проблемы, с которыми сталкиваются айтишники.
🔗 Читать статью
🔗 Зеркало
В современных реалиях все больше специалистов ИТ-индустрии обращаются к психологам, чтобы разобраться с эмоциональными проблемами. Рассмотрим некоторые распространенные запросы и проблемы, с которыми сталкиваются айтишники.
🔗 Читать статью
🔗 Зеркало
❤7🔥4😁1
🔠 Юникод в Python: основы
В Python 3 строки — это неизменяемая последовательность Unicode-символов. В Unicode каждый уникальный символ (буква, цифра и т.д.) имеет собственный идентификатор, известный как кодовая точка (code point).
▶ ️Кодовая точка — число от 0 до 1 114 111. В стандарте Unicode оно обычно представлено в шестнадцатеричном формате, начиная с «U+». Например, U+0041 — это кодовая точка для буквы «A», U+20AC — для символа евро (€).
▶ ️Эти кодовые точки преобразуются в последовательности байтов с помощью кодировки. Одна из самых распространённых схем тут — UTF-8. Посмотрим в коде:
str.encode() возвращает объект типа bytes. Литералы этого типа объектов и его отображение допускают только символы ASCII. Поэтому при вызове encode() у строки s ASCII-совместимое "caf" отображается как есть, а "é" как "\xc3\xa9" (здесь, по сути, два символа).
❔ ASCII — это одна из самых ранних кодировок. Она включает в себя 128 символов (с кодами от 0 до 127), которые охватывают английские буквы в верхнем и нижнем регистре, цифры, знаки препинания и управляющие символы (например, перевод строки). В UTF-8 первые 128 символов соответствуют символам ASCII.
В Python 3 строки — это неизменяемая последовательность Unicode-символов. В Unicode каждый уникальный символ (буква, цифра и т.д.) имеет собственный идентификатор, известный как кодовая точка (code point).
s = 'café'
b = s.encode('utf8')
print(b) # -> b'caf\xc3\xa9'
print(b.decode('utf8')) # -> café
str.encode() возвращает объект типа bytes. Литералы этого типа объектов и его отображение допускают только символы ASCII. Поэтому при вызове encode() у строки s ASCII-совместимое "caf" отображается как есть, а "é" как "\xc3\xa9" (здесь, по сути, два символа).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍9
🐍 Реальный Python: грустные факты, которые вас разочаруют
Пост-пародия от имени разработчицы, которая писала на Python полтора года. Она выбрала язык из-за максимально лояльной динамической типизации, простого обучения (относительно Go) и красивых отступов.
Вот главные претензии разработчицы:
▪️Массовый наплыв промпт-инженеров привёл к падению зарплат.
▪️Найти действительно качественный проект на Python очень трудно. Any повсюду; смущают pyproject.toml, бабушкин sqlite; старый код в ужасном состоянии; картонные новостройки (привет, FastAPI); Гвидо ван Россум может в любое время суток залезть в проект.
▪️Менталитет сообщества. Жалуется на отсутствие дисциплины.
Пост, конечно, юмористический, но в шутках может быть и доля правды😢
Пост-пародия от имени разработчицы, которая писала на Python полтора года. Она выбрала язык из-за максимально лояльной динамической типизации, простого обучения (относительно Go) и красивых отступов.
Вот главные претензии разработчицы:
▪️Массовый наплыв промпт-инженеров привёл к падению зарплат.
▪️Найти действительно качественный проект на Python очень трудно. Any повсюду; смущают pyproject.toml, бабушкин sqlite; старый код в ужасном состоянии; картонные новостройки (привет, FastAPI); Гвидо ван Россум может в любое время суток залезть в проект.
▪️Менталитет сообщества. Жалуется на отсутствие дисциплины.
Пост, конечно, юмористический, но в шутках может быть и доля правды
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
Forwarded from Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
😺🐙✅ Как разобраться в Git: краткая инструкция для джунов
Расскажем, как Git хранит данные, отслеживает изменения и позволяет разработчикам управлять историей коммитов.
Расскажем, как Git хранит данные, отслеживает изменения и позволяет разработчикам управлять историей коммитов.
👍10