Находится условие в для цикла, оценил каждое повторение?

Ни ast.literal_eval, ни ast.parse не предоставляют возможность устанавливать флаги компилятора. Вы можете передать соответствующие флаги в compile, чтобы проанализировать строку с активированным unicode_literals, а затем запустить ast.literal_eval на полученном узле:

import ast

# Not a future statement. This imports the __future__ module, and has no special
# effects beyond that.
import __future__

unparsed = '"blah"'
parsed = compile(unparsed,
                 '<string>',
                 'eval',
                 ast.PyCF_ONLY_AST | __future__.unicode_literals.compiler_flag)
value = ast.literal_eval(parsed)
27
задан James 11 August 2011 в 16:04
поделиться

4 ответа

Да рассчитывают, будет оценен на каждой передаче. Причина, почему то, что для набора возможно быть измененным во время выполнения цикла. Учитывая циклическую структуру переменная я должен представить допустимый индекс в набор во время повторения. Если проверка не была сделана на каждом цикле тогда, это не доказуемо верно. Случай в качестве примера

for ( int i = 0; i < collection.Count; i++ ) {
  collection.Clear();
}

одним исключением к этому правилу является цикличное выполнение по массиву, где ограничением является Длина.

for ( int i = 0; i < someArray.Length; i++ ) {
  // Code
}

JIT CLR будет специальный случай этот тип цикла при определенных обстоятельствах, так как длина массива не может измениться. В тех случаях проверка границ только произойдет однажды.

Ссылка: http://blogs.msdn.com/brada/archive/2005/04/23/411321.aspx

26
ответ дан JaredPar 28 November 2019 в 05:17
поделиться

Количество было бы оценено на каждой передаче. Если бы Вы продолжали добавлять к набору, и итератор никогда не нагонял, то у Вас был бы бесконечный цикл.

class Program
    {
        static void Main(string[] args)
        {
            List<int> intCollection = new List<int>();
            for(int i=-1;i < intCollection.Count;i++)
            {
                intCollection.Add(i + 1);
            }
        }
    }

Это в конечном счете доберется из исключения памяти.

13
ответ дан Jeff Martin 28 November 2019 в 05:17
поделиться

Да, счетчик проверяется при каждом вызове от первой итерации после инициализации i до последней итерации, когда проверка завершается неудачно и цикл for завершается. Вы можете изменить количество коллекций, если хотите, но понимаете, что можете оказаться в бесконечном цикле.

3
ответ дан Kelsey 28 November 2019 в 05:17
поделиться

Примечание стороны, это НЕ проверяется на каждое взаимодействие в VB.

В отличие от C#, VB кэширует результат набора. Количество.

РЕДАКТИРОВАНИЕ:

литеральная версия VB C# для цикла:

Dim i = 0
Do While i < collection.Count
    'code goes here
    i+=1
Loop
3
ответ дан Jonathan Allen 28 November 2019 в 05:17
поделиться
Другие вопросы по тегам:

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