Forwarded from IT Юмор
Упорядочены ли словари в Python?
Что значит «упорядоченный»?
Когда говорят об упорядоченности, важно понять контекст. Например:
— Если просят расставить коробки, порядок — по размеру;
— Если вы в очереди – порядок по времени прихода.
Если структура упорядоченная, она в каком-то смысле сохраняет свой внутренний порядок. А как со словарями?
Исторический обзор
До Python 3.6: словари не сохраняли никакого порядка при выводе или переборе. Параметры key: value могли выводиться в совершенно произвольном порядке.
Начиная с Python 3.6 словари начали сохранять порядок вставки — но это считалось технической деталью реализации, а не официально гарантированным свойством. Позднее это стало частью официальной спецификации языка.
Это значит, что словари упорядочены?
Частично — да:: словари сохраняют порядок добавления элементов. Это позволяет, например, при переборе ключей получать их в том же порядке, что при вставке.
Важное «но»: порядок не влияет на сравнение словарей:
То есть, равенство проверяется по парам ключ‑значение, а не по их порядку (в отличие от списка).
Почему обычный dict сравнивается по содержанию, а не по порядку?
— Оптимизация: словари предназначены для быстрой работы по ключу (хэширование);
— Благодаря «разделённой таблице» (split-table) в реализации CPython, словарь может одновременно эффективно хранить и порядке вставки, и хэш-структуру.
#основы
👌 — Если всё по красоте
Что значит «упорядоченный»?
Когда говорят об упорядоченности, важно понять контекст. Например:
— Если просят расставить коробки, порядок — по размеру;
— Если вы в очереди – порядок по времени прихода.
Если структура упорядоченная, она в каком-то смысле сохраняет свой внутренний порядок. А как со словарями?
Исторический обзор
До Python 3.6: словари не сохраняли никакого порядка при выводе или переборе. Параметры key: value могли выводиться в совершенно произвольном порядке.
Начиная с Python 3.6 словари начали сохранять порядок вставки — но это считалось технической деталью реализации, а не официально гарантированным свойством. Позднее это стало частью официальной спецификации языка.
Это значит, что словари упорядочены?
Частично — да:: словари сохраняют порядок добавления элементов. Это позволяет, например, при переборе ключей получать их в том же порядке, что при вставке.
Важное «но»: порядок не влияет на сравнение словарей:
a = {"x": 1, "y": 2}
b = {"y": 2, "x": 1}
a == b # True
То есть, равенство проверяется по парам ключ‑значение, а не по их порядку (в отличие от списка).
Почему обычный dict сравнивается по содержанию, а не по порядку?
— Оптимизация: словари предназначены для быстрой работы по ключу (хэширование);
— Благодаря «разделённой таблице» (split-table) в реализации CPython, словарь может одновременно эффективно хранить и порядке вставки, и хэш-структуру.
#основы
👌 — Если всё по красоте
Forwarded from Типичный программист
This media is not supported in your browser
VIEW IN TELEGRAM
SQLZoo: интерактивный тренажёр по SQL
Если надоело читать теорию и хочется потрогать SQL ручками — SQLZoo станет идеальным выбором. Здесь сразу на сайте можно выполнять задания, строить запросы к реальным базам и видеть результат.
Есть пошаговые туториалы, задания на SELECT, JOIN, GROUP BY, подзапросы и задачки на логику.
Если надоело читать теорию и хочется потрогать SQL ручками — SQLZoo станет идеальным выбором. Здесь сразу на сайте можно выполнять задания, строить запросы к реальным базам и видеть результат.
Есть пошаговые туториалы, задания на SELECT, JOIN, GROUP BY, подзапросы и задачки на логику.
Streamlit v.1.46.0
Вышло массивное обновление BI-тула , и там теперь среди прочих:
— меню навигации можно разместить в верхней части приложения с помощью
— поддерживается темная тема через
— большинство виджетов и элементов теперь поддерживают параметр ширины
— добавлена настройка CORS для разрешённых источников;
— в сообщениях об ошибках появился удобная копипаст-кнопка;
— теперь можно запускать сервер Streamlit на порту 3000 без дополнительных настроек;
— добавлена поддержка форматов номеров для колонок с числами и прогресс-баров.
Release Note
#инструмент
@zen_of_python
🫡 — Если отдаю честь за такую работу
Вышло массивное обновление BI-тула , и там теперь среди прочих:
— меню навигации можно разместить в верхней части приложения с помощью
st.navigation(position="top")
;— поддерживается темная тема через
st.context.theme
;— большинство виджетов и элементов теперь поддерживают параметр ширины
width
;— добавлена настройка CORS для разрешённых источников;
— в сообщениях об ошибках появился удобная копипаст-кнопка;
— теперь можно запускать сервер Streamlit на порту 3000 без дополнительных настроек;
— добавлена поддержка форматов номеров для колонок с числами и прогресс-баров.
Release Note
#инструмент
@zen_of_python
🫡 — Если отдаю честь за такую работу
Джависткие Virtual Threads в Python
На официальном форуме Python не на шутку разогнали тред про виртуальные потоки. Идея похожа на OpenJDK Project Loom: такое не потребляет много ресурса.
Предлагается создать соответствующее API, чтобы эффективно выполнять большое количество конкурентных задач. Посмотрим, выживет ли идея.
#факт
@zen_of_python
На официальном форуме Python не на шутку разогнали тред про виртуальные потоки. Идея похожа на OpenJDK Project Loom: такое не потребляет много ресурса.
Предлагается создать соответствующее API, чтобы эффективно выполнять большое количество конкурентных задач. Посмотрим, выживет ли идея.
#факт
@zen_of_python
TypedDict | Куда, зачем
Для тех, кто стремится писать поддерживаемый код, существует
В обычных словарях Python ключи и значения могут быть абсолютно любыми, и это даёт большую гибкость, но вместе с тем усложняет контроль и проверку данных.
В примере выше мы создаем класс
Теперь при создании экземпляра:
если в словаре отсутствует обязательный ключ или тип значения не совпадает, современные инструменты статической типизации (например,
Опциональные ключи
Бывает, что не всегда все ключи словаря на месте. В
#основы
@zen_of_python
Для тех, кто стремится писать поддерживаемый код, существует
TypedDict
(«Типизированный словарь»). В этом посте разберём, зачем нужен, как правильно использовать и какие возможности открывает.TypedDict
— это специальный тип данных, что позволяет создавать словари с явно заданными типами для ключей и значений. Таким образом, вы можете описать структуру словаря, как будто это объект с фиксированными полями.
from typing import TypedDict
class User(TypedDict):
name: str
age: int
email: str
В обычных словарях Python ключи и значения могут быть абсолютно любыми, и это даёт большую гибкость, но вместе с тем усложняет контроль и проверку данных.
TypedDict
позволяет добавить статическую типизацию к словарям, тем самым снизить вероятность неожиданных ситуаций с вашими экземплярами.В примере выше мы создаем класс
User
, который наследуется от TypedDict
. Теперь словари типа User
должны иметь ключи name
, age
и email
с типами str
, int
и str
соответственно.Теперь при создании экземпляра:
user: User = {
"name": "Alice",
"age": 30,
"email": "[email protected]"
}
если в словаре отсутствует обязательный ключ или тип значения не совпадает, современные инструменты статической типизации (например,
mypy
) выдадут ворнинг.Опциональные ключи
Бывает, что не всегда все ключи словаря на месте. В
TypedDict
их можно сделать необязательными (total=False
):
class User(TypedDict, total=False):
nickname: str
bio: str
#основы
@zen_of_python
This media is not supported in your browser
VIEW IN TELEGRAM
asdf-vm | Переключаться между окружениями автоматом
Продвинутая система управления виртуальными окружениями, позволяющая в одну команду:
— устанавливать зависимости для НЕСКОЛЬКИХ ЯП в одном окне;
— при переходе в папку другого проекта переключится на соответствующее окружение и многое другое.
Цена: бесплатно
Репозиторий проекта
Сайт
🌚 — Если это уже слишком «дебри»
😎 — Если считаешь такое элегантным
Продвинутая система управления виртуальными окружениями, позволяющая в одну команду:
— устанавливать зависимости для НЕСКОЛЬКИХ ЯП в одном окне;
— при переходе в папку другого проекта переключится на соответствующее окружение и многое другое.
Цена: бесплатно
Репозиторий проекта
Сайт
🌚 — Если это уже слишком «дебри»
😎 — Если считаешь такое элегантным
pip vs. pip3 | Что выбрать?
Если вам вдруг стало очень важно понимать различие между этими менеджерами зависимостей, то все просто. Основное различие — это «принадлежность» версиям Python 2 или 3:
-
-
Если у вас установлен только Python 3,
Как проверить, какая версия связана с pip
#основы
@zen_of_python
Если вам вдруг стало очень важно понимать различие между этими менеджерами зависимостей, то все просто. Основное различие — это «принадлежность» версиям Python 2 или 3:
-
pip
— это менеджер пакетов по умолчанию для Python 2 / 3 (где «двойка» не установлена;-
pip3
— это явно указанный менеджер пакетов для Python 3.Если у вас установлен только Python 3,
pip
и pip3
будут работать одинаково.Как проверить, какая версия связана с pip
pip --version # pip 20.0.2 from /usr/lib/python2.7/site-packages/pip (python 2.7)
pip3 --version # pip3 21.2.4 from /usr/lib/python3.8/site-packages/pip (python 3.8)
#основы
@zen_of_python
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Как по мнению Python-разработчика на самом деле должен работать Pip-Boy в игре Fallout.
#кек
@zen_of_python
#кек
@zen_of_python
Forwarded from Типичный программист
Как искать работу в IT в 2025, не вызывая подозрений у санитаров
В отборе в IT страсти кипят не меньше, чем в хайлоаде. Вместе с Proglib мы провели исследование и спросили сотни айтишников: что реально выводит из себя в найме?
Собрали всё в удобный чек-лист:
– HR узнают, как не отпугивать сильных кандидатов.
– Айтишники поймут, где сразу маячат ред флаги и можно не терять время.
Надеемся, материал хоть и немного, но изменит процессы найма к лучшему. Поэтому сохраняйте, делитесь и прожимайте ❤️
В отборе в IT страсти кипят не меньше, чем в хайлоаде. Вместе с Proglib мы провели исследование и спросили сотни айтишников: что реально выводит из себя в найме?
Собрали всё в удобный чек-лист:
– HR узнают, как не отпугивать сильных кандидатов.
– Айтишники поймут, где сразу маячат ред флаги и можно не терять время.
Надеемся, материал хоть и немного, но изменит процессы найма к лучшему. Поэтому сохраняйте, делитесь и прожимайте ❤️
PySnooper | Дебаггинг по-человечески
Опять кто-то пытается отучить нас использовать print() во время дебага... Автор тула предлагает использовать:
— декораторы @pysnooper.snoop();
— блоки with pysnooper.snoop();
Чтобы в итоге получить такую отладочную информацию, как на приложенном скриншоте. Вот что происходит на нем слева:
— вызывается функция
— в строках кода функции (справа) видно, что она предназначена для перевода числа в двоичный формат, сохраняя биты в списке
— PySnooper пошагово логирует каждую выполненную строку (слева), время выполнения, а также все изменяющиеся переменные;
— переменная
— каждый раз происходит деление с остатком (
— В итоге возвращается список битов
Репозиторий проекта
#инструмент
@zen_of_python
Опять кто-то пытается отучить нас использовать print() во время дебага... Автор тула предлагает использовать:
— декораторы @pysnooper.snoop();
— блоки with pysnooper.snoop();
Чтобы в итоге получить такую отладочную информацию, как на приложенном скриншоте. Вот что происходит на нем слева:
— вызывается функция
number_to_bits
с аргументом number = 6
;— в строках кода функции (справа) видно, что она предназначена для перевода числа в двоичный формат, сохраняя биты в списке
bits
;— PySnooper пошагово логирует каждую выполненную строку (слева), время выполнения, а также все изменяющиеся переменные;
— переменная
number
последовательно изменяется от 6 до 3, потом до 1, затем до 0 — каждый раз происходит деление с остатком (
divmod(number, 2)
), а остаток (remainder
) вставляется в начало списка bits
;— В итоге возвращается список битов
[1, 1, 0]
, что соответствует двоичному представлению числа 6.Репозиторий проекта
#инструмент
@zen_of_python
shebang
: что это и как запускать скрипты в CLI без слова python?При работе с Unix-подобными системами (Linux, macOS), часто используется специальная строка, которая называется 'shebang' (шибэнг). Это первая строка в скрипте, которая начинается с символов
#!
, за которыми идёт путь к интерпретатору, который должен выполнить этот скрипт:
#!/usr/bin/env python3
print("Hello world")
Это равносильно: «Для запуска этого файла используй интерпретатор python3, который находится в вашем PATH».
Перед запуском сделаем файл исполняемым (или сразу всю директорию):
chmod +x myscript.py
chmod +x misc/*.py
Теперь скрипт можно запустить так:
./myscript.py
Как правильно писать shebang для Python?
Существует несколько распространённых вариантов записи shebang для Python:
1. Абсолютный путь
#!/usr/bin/python3
Однако, путь может отличаться на разных машинах, поэтому второй способ универсальнее.
2. Использование `/usr/bin/env`:
#!/usr/bin/env python3
Команда
env
ищет в текущем окружении пользователя нужный интерпретатор по имени python3
и запускает его. Это значит, что не важно, где установлен Python, скрипт всё равно будет работать, если python3
доступен в PATH.Что произойдет без shebang?
Если запустить скрипт без shebang напрямую (
./myscript.py
), система не поймет, каким интерпретатором его запускать, и выдаст ошибку. p.s. На Windows shebang не используется системой напрямую, но некоторые инструменты (например, Git Bash, WSL, или IDE) могут её «наследовать».
#основы
@zen_of_python