Подтвердить что ты не робот

Является ли "* _" приемлемым способом игнорировать аргументы в python

Если у меня есть функция/метод, являющийся реализацией обратного вызова для какой-либо структуры, и не заботятся о каких-либо дополнительных аргументах, она кажется синтаксически правильной и не требует жалобы pylint/IDE на использование * _, чтобы выразить никакой интерес в любых дальнейших аргументах. Я считаю, что я хочу выразить намерение как инструментам, так и другим разработчикам, что эти аргументы в настоящее время не актуальны.

Чтобы уточнить, я имею в виду:

def my_callbacK_handler(a, b, *_):
  ...

Мне не кажется, что эта идиома используется в дикой природе - это распространено, есть примеры и есть ли известные проблемы с этим?

Для тех, кто не знаком - "_" выражает намерение, что меня это не интересует, это питон "манекен", который распознается IDE и линтерами.

4b9b3361

Ответ 1

Это просто переменная, как и любая другая, но по соглашению это означает, что вы не собираетесь использовать это значение, просто объявляйте и забывайте об этом.

[OrderedSet() for _ in xrange(n)]

строит список из n пустых упорядоченных множеств. _ является индексом, но не используется; _ обычно используется по мере необходимости, но не используется, имя переменной (не только в python). Это просто сложная идиома python, потому что для этого нет встроенного синтаксиса.

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

Обратите внимание, что _(...) как вызов макроса имеет другое условное значение, которое исходит из gettext, где используется _("string literal") чтобы указать строку, которая нуждается в локализации.

Поток для чтения из ActivesState

Я не могу сказать о каких-либо проблемах, python не использует его внутри, это просто переменная, нам нужно быть осторожным.


ОБНОВИТЬ:

Синтаксис - это * и **. Имена * args и ** kwargs являются только по соглашению, но нет необходимости их использовать.

def my_callbacK_handler(a, b, *_):
  ...

Итак, что я понимаю, если я вижу эту функцию в вашем коде _ idiom, эта функция использует только аргументы a и b в своей работе и игнорирует другие.

Поскольку вы заявляете "* _ не выражать никакого интереса к каким-либо дополнительным аргументам",