Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 24

В целом статья хорошая, но вот этот сниппет явно из каких-то "Вредных советов":

match packet:
    case [c1, c2, *data, footer] if (  # Деконструируем пакет на заголовок, данные и конец
        (checksum := c1 + c2) == sum(data) and  # Проверяем корректность контрольной суммы
        len(data) == footer  # Проверяем корректность размера данных
    ):
        ...

Если в контексте произойдет ошибка, то второй print() не будет вызван.

import contextlib

@contextlib.contextmanager
def retry():
    print("Entering Context")
    yield
    print("Exiting Context")

Правильно:

import contextlib

@contextlib.contextmanager
def retry():
    print("Entering Context")
    try:
        yield
    finally:
        print("Exiting Context")

В повседневной разработке 99% кода не будет даже затрагивать те сценарии использования, в которых были бы полезны метаклассы

через метаклассы отлично решается задача, когда нужен singletone паттерн:

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

class MetaSingleton(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(MetaSingleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]


class DatabaseSessionManager(metaclass=MetaSingleton):
    def init(self, db_settings: dict) -> None:
        self.database_url = db_settings["database_url"]
        .....

Можно гораздо проще. Так как модули в Python сами по себе являются синглтонами, то достаточно создать инстанс класса и импортировать уже его. За примерами далеко ходить не надо - модуль logging построен примерно по такому принципу, хотя там конечно все устроено немного сложнее, просто это первое, что пришло в голову.

За то синтаксис простой!

Не за то, а за трудящихся!

Смешанное чувство от таких материалов. С одной стороны вроде бы хорошо, что язык не стоит на месте, развивается, обретает новые мощные возможности (ну или это я развиваюсь и узнаю наконец о них). Но с другой стороны, хорошо ли такое бесконечное расширение? Оно приведет лишь к тому, что типичная книга "Введение в Python" будет занимать тысячи страниц. Что всех этих фич вместе не будет знать ни один человек. Для большинства они могут выскакивать неожиданно, вызывая удивление и внося сумятицу в код. Со временем они станут ненужным тормозом обратной совместимости. И очень скоро порог вхождения в язык для prod-уровня станет настолько высоким, что знание его станет уделом редких гуру, а новое поколение выкинет его с облегчением, как какой-нибудь КОБОЛ или LDAP, придумает себе очередной простенький JavaScript, и опять начнет увлеченно и беспорядочно навешивать на него заманчивые фичи...

Ну пока что никто не выкинул кучу основных языков, которые гораздо сложнее раннего Питона.

Да, читал статью, а в голове "Это простой и понятный читаемый язык для начинающих?!" Имхо, все это совсем не соответствует дзену питона.

Голоса закончились, проголосую коментом. Я ток еле Классы освоил а тут читая в голове крутилось данунахер стану проституткой, учить +сы)

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

А по поводу динамичного развития с частым отправлением конструкций в деприкейтед: ну вот была джава, в которой десятками лет особо ничего нового не привносили, или тот же js - в итоге создали кучу оберток и транспайлеров, чем заставили оригинальные языки развиваться.

Таков естественный путь жизни языка, я не вижу смысла этому противиться. PL-1 его уже успешно прошёл, С++ находится на стадии "снова ягодка опять", следом идут Java и С#. Почему Python-у должно быть запрещено обрастать новыми фичами и хорошеть с возрастом ?

Я считаю, пускай Python вберёт в себя некоторые внешние проявления языков семейства ML ! Таким образом язык и комьюнити быстрее доберутся до более сложных задач (граблей?) совмещения мутабельности и наследования с одной стороны и фич иммутабельных по умолчанию функциональных языков. Пусть у Python получится не хуже, чем у Scala и пускай он не потеряет популярность по дороге, успупив место новому молодому простому языку.

В первом же примере кода переменная upper_words - то для списка, то для строки. А ещё пишете о типизации. Нехорошо)

А мне понравилась статья! Понравилась, что написана просто, без напыщенности и апломба. Питон знаю на начальном уровне(как хобби) и было интересно узнать о всяких возможностях.

Тем, кто пишет про возрастающую сложность современных версий языка. Входной порог по прежнему низкий. Все описанное в статье - advanced штуки, нисколько не претендующие на обязательность. Вы всегда можете быстро написать простой скрипт на питоне, без типизации, без байто*бства, без темной магии метаклассов. Но все это семантическое богатство позволяет выражать сложное поведение, на тот случай если питон вам нужен для чего то большего, чем скриптинг.

А для чего именно? напишите если не лень пж. Мне просто интересно как новичку.

Точно так же можно сказать про c++ - никто не заставляет использовать все его богатство, пишите как на C. Только это "богатство" рано или поздно больно стреляет в ногу.

Ну на пайтон наверное чутка придется постараться попасть в ногу все таки. Типизация, указатели, управление памятью...или нет?🤔

Ну, это не из новинок, но например mutable-типы могут больно стукнуть.

Еще недавно у меня тупой баг был из-за truthy/falsy - решил вообще больше этим не пользоваться, все логические условия прописывать явно.

а котеджами заменить нельзя? или не тот случай?

понял понял сорян
понял понял сорян

" По поводу truthy/falsy — да, бывает опасно полагаться на неявную логику. Например, [], 0, "" и None все считаются False, но иногда это поведение может привести к путанице. Явные проверки вроде if value is not None and value != 0: могут быть безопаснее.(С) gpt

не я их еще не встречал, но прочту на досуге документацию

видимо разворачивается в

False == False and False in [False]

Да. Как раз пункт 9.4 из статьи. Мне кажется, там должно быть некоторое количество втф в час из-за включения in в цепочки.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий