为何print函数会打印for循环迭代的最后一个数字?附代码示例
为什么
print会打印for循环迭代的最后一个数字? 嘿,这个问题其实挺常见的,刚上手Python的朋友很容易疑惑这个点,我来给你掰扯清楚~
首先先纠正下你代码里的小细节:Python里获取列表长度的函数是len(),不是length(),不过这不影响核心问题的解释哈。
核心原因:Python中for循环变量的作用域
和一些其他编程语言不同,Python的for循环变量(比如你代码里的number)并不是循环内部的局部变量,它是定义在循环所在的外部作用域中的。也就是说,当循环结束后,这个变量并不会被销毁,而是会保留最后一次迭代时被赋予的值。
看你的代码:
array = [1,2,3,3,3,3,9,4,5] for number in range(1, len(array)+1): pass print(number) # 输出9
这里range(1, len(array)+1)生成的序列是1,2,3,4,5,6,7,8,9(因为array的长度是9)。循环会依次把这些值赋值给number,每次循环执行pass(啥也不做),直到最后一次迭代时,number被赋值为9,循环结束。这时候number变量还在当前作用域里,所以print(number)就会输出这个最后保留的9。
直观验证一下
如果你把循环里的pass换成print(number),就能看到每次循环number的变化:
array = [1,2,3,3,3,3,9,4,5] for number in range(1, len(array)+1): print(number) # 依次输出1到9 print("循环结束后number的值:", number) # 还是输出9
这样是不是就一目了然了?
小补充:如果想保存每次迭代的值怎么办?
要是你想把循环里的每个值都存下来,而不是只保留最后一个,可以用一个列表来收集:
array = [1,2,3,3,3,3,9,4,5] numbers = [] for number in range(1, len(array)+1): numbers.append(number) print(numbers) # 输出[1,2,3,4,5,6,7,8,9]
内容的提问来源于stack exchange,提问作者Ritik sharma
相关产品推荐
相关产品推荐

