Как стать автором
Обновить

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

И где же былая простота и ясность Python кода?

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

Мне кажется это не так критично из-за необязательности тайпхинтинга. По-прежнему в учебных целях можно показывать новичкам простой лаконичный прозрачный код, а те, кого уже не испугать расширенным синтаксисом, могут насладиться большей надёжностью и уверенностью, что где-то не закралась ошибочка.
Новичкам труднее читать чужой код? Да, но, мне кажется, это не большая цена за спокойствие.

Да уж, с «There should be one — and preferably only one — obvious way to do it» тоже дела в последнее время не очень.

Зато норм с


Explicit is better than implicit.
Так вот что чувствовали люди пишущие на C, когда увидели C++?

Интересно, когда в популярных IDE начнут появляться режимы сокрытия типизации в коде?
Вжух! — и код снова чист и прозрачен, но при этом мы продолжаем получать ворнинги в случае подозрительных махинаций с типами.

Вроде как давно уже поддерживается описание тайп-хинтов в отдельном от кода файле с расширением .pyi. Это даже применимо для кода на Python2.
Правда поддерживать актуальность этих файлов несколько сложнее, т.к. надо не забывать вносить в них правки при изменении кода.

Да это вообще антипаттерн какой-то. Мы для кого жизнь упростить хотим? Для роботов или человеков? Пусть вкалывают!
Делов-то — держать привязанное к коду синтаксическое дерево и прятать лишние лексемы...

Такое есть в IDEA+Kotlin. Kotlin умеет автоматически выводить типы, и они явно в коде не прописываются, а IDEA показывает подсказки по типам.

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

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

Literal какая-то невероятно странная хрень. Это типа попытка замутить арифметику в условном Compile Time, как в плюсах? Иначе мне не очень понятно, чем Literal лучше константы внутри метода?

Нет, ни в коем случае это не арифметика. Это скорее "енумы" + дополнительная возможность параметризовать шаблонные функции.


Например, взяв Literal +overload мы можем сделать функцию, которая в завимости от значения параметра возвращает разный тип: функция open возвращает класс работающий с байтами если режим содержит букву 'b' или со строками, в противном случае (пример из PEP):


# Note: this is a simplification of the true type signature.
_PathType = Union[str, bytes, int]

@overload
def open(path: _PathType,
         mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+"],
         ) -> IO[Text]: ...
@overload
def open(path: _PathType,
         mode: Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"],
         ) -> IO[bytes]: ...

# Fallback overload for when the user isn't using literal types
@overload
def open(path: _PathType, mode: str) -> IO[Any]: ...

Ок, понял, спасибо.

Final

Так, глядишь, и настоящих констант дождёмся.
Так, глядишь, и настоящих констант дождёмся.

Ну джавы в python уже почти дождались.
НЛО прилетело и опубликовало эту надпись здесь
Просветите неофита, это хорошо или плохо?
НЛО прилетело и опубликовало эту надпись здесь
Что вы имеете ввиду?

А я бы не отказался от (я не про синтаксис):


@throw(ValueError)
def foo(arg:  int) -> str:
    pass

Можете попробовать глянуть dry-python/returns. Но лично мне оно не зашло в том виде, в котором предлагается

А про самое новое новшество что-то ни слова, про Assignment Expressions, PEP 572 . Об этом, конечно, давно известно, но всё-таки это — первый релиз.

# Handle a matched regex
if (match := pattern.search(data)) is not None:
    # Do something with match

# Reuse a value that's expensive to compute
[y := f(x), y**2, y**3]

# Share a subexpression between a comprehension filter clause and its output
filt_data = [y for x in data if (y := f(x)) is not None]

Почему же ни слова? Я в начале статьи упомянул моржей :)

Фичи Lisp'ов продолжают диффундировать в Python, прикольно.

Может оно всё и полезно, но из простого и понятного языка, который декларировал ясность и понятность мы получаем какой-то малопонятный комбайн. Очень жаль
Я такого же мнения. Как по мне, так последняя норм версия 3.5. А потом пошло все в такие дебри… Когда мне нужны все эти штуки с аннотациями и прочим — я беру C++. А делать из python плюсы — ну как-то не очень, я считаю.

Подскажите, а как вы раньше пользователям вашего модуля объясняли какие данные надо передать в метод или что он возвращает?

PEP 257 никто не отменял. И хоть это только рекомендации, так ведь аннотации — тоже рекомендации. Так зачем из простого и понятного кода делать Франкенштейна.
а чем типизированые словари отличаются от дата класов?

Тем, что это на самом деле обычные словари

Поправьте пожалуйста.
Например, Literal[42] означает, что ожидается в качестве значения ожидается только 42.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории