Подчеркивание как имя переменной в Python [дубликат]
этот вопрос уже есть ответ здесь:
у Питера Норвига есть эссе, описывающее программа для решения головоломок судоку, даже самые сложные, путем объединения детерминированных логических операций и смарт обход возможных решений. Последнее делается рекурсивно; вот эта функция (источник):
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]
)
(я добавил некоторые пробелы, АСБ, и вкладки, ради моих глаз; извинения доктору Норвиг.)
прямо под комментарием есть строка, начинающаяся с "_,s
". Это, кажется, распакованный кортеж (len(values[s]),s
) с минимальным значением s
. Доктор Норвиг использует "_
"в качестве имени переменной просто указать, что это" не волнует " результат, или что-то еще происходит? Бывают ли времена, когда"_
" рекомендуется в качестве имени переменной? В интерактивном режиме, "_
" содержит ответ предыдущей операции; есть ли аналогичная функция в неинтерактивном коде?
обновление
Спасибо за хорошие ответы. Я думаю, что ответ идет к Алексу Мартелли за "добавленную стоимость"; он указывает, что идиома"_, vbl_of_interest " часто является побочным эффектом идиомы DSU, которая сама по себе была сделана в значительной степени ненужный.
3 ответа:
да,
_
Это традиционное название для "не волнует" (который, к сожалению, сталкивается с его использованием в I18N, но это отдельная проблема;-). Кстати, в сегодняшнем Python, вместо:_,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 писал Для, но идиома, которую он использует, является примером " decorate-sort-undecorate "[[DSU]] за исключением min вместо sort, а в сегодняшнем Python
key=
необязательный параметр, как правило, лучший способ делать ДСУ;-).