【问题标题】:Python: Tracing the Execution of a For LoopPython:跟踪 For 循环的执行
【发布时间】:2011-12-23 08:47:56
【问题描述】:

我正在尝试跟踪一段代码的执行,该代码包含一个 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行会执行多少次?

我的理解是这段代码的第一行:for i in range(len(aString)),只会执行一次。而第 2 行和第 5 行将根据传递的字符串执行多次。当函数遇到continue 语句时,它会返回到第2 行并运行它。请确认或更正我的想法。

谢谢

【问题讨论】:

  • 你读过continue语句的什么定义?您能否提供您正在使用的教程的链接或参考?不清楚你读到了什么,所以不清楚你真正在问什么。
  • 我正在阅读的书是 Brad Miller 的“Python Programming in Context”。这个问题不是来自我只是想了解迭代的工作原理的书。我对我的问题进行了一些编辑。希望现在更清楚了。
  • 与当前主题无关,但您可以使用for c in aString。现在,您正在创建一个包含 n 个整数的列表(n 是字符串的长度,一次从该列表中检索一个整数,并使用它们来索引字符串,此时您可以直接迭代字符串的字符.
  • “迭代究竟是如何工作的”?你所说的“确切地”是什么意思?似乎您在询问有关循环的几件事,其中一些是微不足道的,而其中一些是显而易见的。您能否更清楚地了解什么让您感到困惑。
  • 问题已经回答了

标签: python if-statement trace conditional-statements


【解决方案1】:

你对代码的理解是正确的。

FWIW,使用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')

【讨论】:

  • 好吧,这是说for i in range(len(aString)): 行运行了十次?
  • 是的,它运行了十次(包括确定没有更多工作要做的最终迭代)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
相关资源
最近更新 更多