在python中为循环重载变量?

2024-05-14 12:52:20 发布

您现在位置:Python中文网/ 问答频道 /正文

今天我遇到一段代码,促使我编写了这个小函数:

def strangeloop(n):
   for n in range(1, n):
      print n

奇怪循环(10)最后打印出从1到9的数字。我的问题是,为什么循环变量与参数不冲突?你知道吗


Tags: 函数代码infor参数defrange数字
3条回答

Pythonsfor循环的工作方式不同于cfor循环。 range不将正在运行的变量与其参数进行比较。 它返回一个数字列表(python2)或一个生成这些数字的生成器。你知道吗

然后for循环将一个又一个元素分配给正在运行的变量。你知道吗

Python2:

>>> l = range(5)
>>> l
[0, 1, 2, 3, 4]

Python3:

>>> g = range(5)
>>> g
range(0, 5)
>>> list(g)
[0, 1, 2, 3, 4]

一个for循环给它的循环变量赋值,就像其他赋值一样。执行代码的原因与执行此操作的原因相同:

x = 2
x = 3

后面的作业只是覆盖了前面的作业。在您的例子中,循环变量覆盖函数参数。你知道吗

注意,range(1, n)在循环开始之前计算一次。所以当时它指的是函数参数。一旦发生这种情况,第一个循环值被分配给n,然后函数参数被覆盖,不再可访问。循环在循环时不“需要”函数参数。你知道吗

答案是range(1, n)创建了一个range对象,当for循环将n设置为range中的值时,覆盖函数参数n并不重要。你知道吗

这段代码运行良好可能就不那么令人惊讶了,原因也是一样的:

def strangeloop(n):
   r = range(1, n):
   for n in r:
      print n

n的值是传递给range的值,而不是变量本身,因此range对象看不到变量n已经更改。你知道吗

相关问题 更多 >

    热门问题