Вопрос

Этот вопрос уже имеет ответ здесь:

Питер Норвиг имеет эссе, описывающее Программа для решения головоломок Судоку, даже самые сложные, путем объединения детерминированных логических операций и умного обхода возможных решений. Последнее сделано рекурсивно; Вот эта функция (источник):

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 ;-).

Другие советы

Ты прав. В неинтерактивном режиме _ не имеет особого значения. Действительно, Норвиг просто хочет передать, что он не заботится о значении этой переменной.

Оффтопический: эта статья Норвига очень хорошая. Рекомендуемое чтение.

Ваша интерпретация верна. За пределами особого значения в интерактивном режиме _ просто используется в качестве имени переменной «не заботиться», особенно при распаковке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top