python - for循环中缩进错误时,代码依然可以执行的问题
巴扎黑
巴扎黑 2017-04-18 09:49:11
[Python讨论组]

图一如下,正确缩进时:

图二如下,想问下,为何print缩进位置错误时,python依然可以执行,但却没有依次列出range(1,11)的计算,只有最后一个位置的计算?
这是涉及到全局变量,局部变量吗?

小弟刚开始学编程,如果这个问题是因为不了解哪块概念,还望各位大大告知。。。

巴扎黑
巴扎黑

全部回复(4)
黄舟

图一图二的缩进都是符合python语法的,语法没错误。
只不过图二这种输出情况与你预期的不同…

你的这段代码全是全局变量,不存在局部变量…

图一因为是print语句在for循环内部,所以循环几次输出几次。
而图二的print语句在for循环外部,只会执行一次。

怪我咯

单单从你的结果上来分析,print 缩进导致 for 循环里只有一句话 table = n * i,然后 print 的结果来看,i 和 table 都变成全局的了,但是很明显提示 error,说明这样做不符合规范。

巴扎黑

python中,一切皆对象。
是在用到对象的时候,才去寻找该对象。
题中,n是题主输入的3,i是for循环后的值10,table被不断赋值,最后的table = n i = 3 10 = 30
然后print出来。这语法没问题的。

伊谢尔伦

缩进是python的语法规则,但缩进并非作用域。比如你的例子中:

for i in list(range(1, 11)):
    table = n * i
    

这段代码不能将之认为是JS等语言中的:

for (var i=1; i<11; i++){
    var table = n * i;
}

前者只是语法上的缩进,后者涉及到了作用域。
再举个例子:

import random
if random.randint(0, 1):
    a = 1
print a

有50%的概率可以正常执行,50%不可以正常执行。这是因为 a=1有50%的概率有定义赋值。a并不是在函数内的局部变量,不存在局部变量作用域的问题。不可以跟以下的例子进行概念的混淆。

def set_a():
    a = 1
set_a()
print a  # raise NameError,a没有定义
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号