#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. Да, он выполнялся десять раз (включая последнюю итерацию, которая определила, что больше ничего не нужно делать).