图一如下,正确缩进时:
图二如下,想问下,为何print缩进位置错误时,python依然可以执行,但却没有依次列出range(1,11)的计算,只有最后一个位置的计算?
这是涉及到全局变量,局部变量吗?
小弟刚开始学编程,如果这个问题是因为不了解哪块概念,还望各位大大告知。。。
缩进是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没有定义
python中,一切皆对象。
是在用到对象的时候,才去寻找该对象。
题中,n是题主输入的3,i是for循环后的值10,table被不断赋值,最后的table = n i = 3 10 = 30
然后print出来。这语法没问题的。
单单从你的结果上来分析,print 缩进导致 for 循环里只有一句话 table = n * i
,然后 print 的结果来看,i 和 table 都变成全局的了,但是很明显提示 error,说明这样做不符合规范。
图一图二的缩进都是符合python
语法的,语法没错误。
只不过图二这种输出情况与你预期的不同…
你的这段代码全是全局变量,不存在局部变量…
图一因为是print
语句在for
循环内部,所以循环几次输出几次。
而图二的print
语句在for
循环外部,只会执行一次。