Python: отслеживание выполнения цикла For - PullRequest
2 голосов
/ 07 ноября 2011

Я пытаюсь отследить выполнение фрагмента кода, который содержит 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 Ответ

3 голосов
/ 07 ноября 2011

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

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

Например, последний вызов 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')
...