Python: отслеживание выполнения цикла For

#python #if-statement #trace #conditional-statements

#python #оператор if #трассировка #условные операторы

Вопрос:

Я пытаюсь отследить выполнение фрагмента кода, который содержит for loop с двумя if conditionals . Но мне нужна помощь в понимании того, как именно for loops выполняются в python.

Пожалуйста, рассмотрите следующий пример:

   numAs = 0
  numEs = 0
  aStr1 = 'abcdefge'
   def someFunc(aString):
1.     for i in range(len(aString)): 
2.           if s[i] == 'a': 
3.               numAs  = 1 
4.               continue 
5.           if s[i] == 'e': 
6.               numEs  = 1 
7.               if numEs > numAs:  
8.                    break 
9. print(someFunc(aStr1))
  

Вопрос: Используя aStr в качестве параметра, сколько раз строка 1 будет выполняться в приведенном выше коде?

Насколько я понимаю, строка 1. этого фрагмента кода: for i in range(len(aString)) , будет выполнена только один раз. В то время как строки 2 и 5 будут выполняться несколько раз в зависимости от передаваемой строки. Когда функция встречает continue инструкцию, она возвращается к строке 2 и запускает ее. Пожалуйста, подтвердите или исправьте мое мышление.

Спасибо

Комментарии:

1. Какое определение continue инструкции вы прочитали? Можете ли вы предоставить ссылку на руководство, которое вы используете? Неясно, что вы прочитали, поэтому неясно, о чем вы действительно спрашиваете.

2. книга, которую я читаю, называется «Программирование на Python в контексте» Брэда Миллера. Этот вопрос не из книги, я просто пытаюсь точно понять, как работает итерация. Я внес несколько изменений в свой вопрос. надеюсь, теперь это более понятно.

3. Не имеет отношения к рассматриваемой теме, но вы могли бы просто сделать for c in aString . Прямо сейчас вы создаете список из n целых чисел (n — длина строки, извлекаете целые числа из этого списка по одному за раз и используете их для индексации в строку, когда вы могли бы просто выполнять итерации непосредственно по символам строки.

4. «как именно работает итерация»? Что вы подразумеваете под «точно»? Похоже, вы задаете несколько вопросов о циклировании, некоторые из которых тривиальны, а некоторые очевидны. Можете ли вы более четко объяснить, что вас смущает.

5. на вопрос уже дан ответ

Ответ №1:

Ваше понимание того, что делает код, правильное.

Черт возьми, легко следить за выполнением скрипта с помощью python -m trace --trace some_script.py или вы можете увидеть количество строк выполнения с помощью python -m trace --count some_script.py .

Например, последний вызов trace выдает:

     1: def someFunc(aString):
            global numAs, numEs
    1:      s = aString
   10:      for i in range(len(aString)): 
    9:            if s[i] == 'a': 
    2:                numAs  = 1 
    2:                continue 
    7:            if s[i] == 'e': 
    1:                numEs  = 1 
    1:                if numEs > numAs:  
                           break

    1: numAs = 0
    1: numEs = 0
    1: someFunc('flammable')
  

Комментарии:

1. хорошо, значит, это говорит о том, что строка for i in range(len(aString)): была запущена десять раз?

2. Да, он выполнялся десять раз (включая последнюю итерацию, которая определила, что больше ничего не нужно делать).