Python вложен в цикл, не повторяющийся, как ожидалось [дубликат]

Используя ES2017, вы должны иметь это как объявление функции

async function foo() {
    var response = await $.ajax({url: '...'})
    return response;
}

и выполнить его следующим образом.

(async function() {
    try {
        var result = await foo()
        console.log(result)
    } catch (e) {}
})()

Или синтаксис Promise

foo().then(response => {
    console.log(response)

}).catch(error => {
    console.log(error)

})
16
задан BartoszKP 16 December 2014 в 22:18
поделиться

3 ответа

Не получая слишком технических:

Если вы выполняете итерацию через изменяемую последовательность в Python, и последовательность изменяется во время ее повторения, не всегда ясно, что произойдет. Если вы вставляете элемент в последовательность во время итерации через него, что теперь разумно будет считаться «следующим» элементом в последовательности? Что делать, если вы удаляете следующий объект?

По этой причине повторение с помощью изменяемой последовательности при ее изменении приводит к неуказанному поведению. Все может произойти, в зависимости от того, как именно реализован список. : -)

13
ответ дан pv2b 24 August 2018 в 05:31
поделиться

Когда вы изменяете коллекцию, которую вы итерируете, итератор может вести себя неожиданно, например, пропускать элементы или возвращать один и тот же элемент дважды.

Этот код бесконечно циклически выполняется при запуске:

>>> a = [ 'foo', 'bar', 'baz' ]
>>> for x in a:
...    if x == 'bar': a.insert(0, 'oops')

Это потому, что итератор использует индекс, чтобы отслеживать, где он находится в списке. Добавление элемента в начале списка приводит к тому, что элемент «bar» возвращается снова, вместо того, чтобы итератор переходил к следующему элементу.

1
ответ дан Mark Byers 24 August 2018 в 05:31
поделиться

Это обычная проблема на многих языках. Если у вас есть линейная структура данных, и вы повторяете ее, что-то должно отслеживать, где вы находитесь в структуре. Это может быть текущий индекс или указатель, но это какой-то палец, указывающий на «текущее место».

Если вы изменяете список во время итерации, этот курсор, вероятно, будет неправильным.

Общей проблемой является то, что вы удаляете элемент под курсором, все слайд вниз, следующая итерация цикла увеличивает курсор и вы случайно пропустили элемент.

Некоторые реализации структуры данных предлагают возможность удалять элементы во время итерации, но большинство из них не работает.

12
ответ дан Ned Batchelder 24 August 2018 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: