Подчеркнуть _ в качестве имени переменной в Python [Duplicate
-
20-09-2019 - |
Вопрос
Этот вопрос уже имеет ответ здесь:
Питер Норвиг имеет эссе, описывающее Программа для решения головоломок Судоку, даже самые сложные, путем объединения детерминированных логических операций и умного обхода возможных решений. Последнее сделано рекурсивно; Вот эта функция (источник):
def search(values):
"Using depth-first search and propagation, try all possible values."
if values is False:
return False ## Failed earlier
if all( len( values[s]) == 1 for s in squares):
return values ## Solved!
## Chose the unfilled square s with the fewest possibilities
_,s = min( (len( values[s]), s)
for s in squares
if len(values[s]) > 1
)
return some( search( assign( values.copy(), s, d))
for d in values[s]
)
(Я добавил несколько мест, CRS и вкладок ради моих глаз; извиняюсь перед доктором Норвигом.)
Прямо под комментарием есть линия, начиная с "_,s
". Кажется, это распакованный кортеж (len(values[s]),s
) с минимальным значением s
. Анкет Доктор Норвиг использует "_
«В качестве имени переменной, чтобы указать, что это результат« не заботиться », или что -то еще происходит? Есть ли времена, когда»_
«Рекомендуется как имя переменной? В интерактивном режиме»,_
«Удерживает ответ предыдущей операции; есть ли аналогичная функция в неинтерактивном коде?
Обновлять
Спасибо за хорошие ответы. Я предполагаю, что ответ идет Алексу Мартелли за "добавленную стоимость"; Он отмечает, что идиома «_, vbl_of_interest» часто является побочным эффектом идиомы DSU, которая сама была в значительной степени ненужным.
Решение
Ага, _
это традиционное название для «Не заботиться» (которое, к сожалению, сталкивается с его использованием в I18N, но это отдельная проблема ;-). Кстати, в сегодняшнем питоне вместо:
_,s = min( (len( values[s]), s)
for s in squares
if len(values[s]) > 1
)
Вы можете кодировать
s = min((s for s in squares if len(values[s])>1),
key=lambda s: len(values[s]))
(Не уверен, для чего писал релиз Python Peter, но идиома, которую он использует key=
Дополнительный параметр, как правило, лучший способ сделать DSU ;-).
Другие советы
Ты прав. В неинтерактивном режиме _
не имеет особого значения. Действительно, Норвиг просто хочет передать, что он не заботится о значении этой переменной.
Оффтопический: эта статья Норвига очень хорошая. Рекомендуемое чтение.
Ваша интерпретация верна. За пределами особого значения в интерактивном режиме _
просто используется в качестве имени переменной «не заботиться», особенно при распаковке.