python中的重载变量用于循环?

python中的重载变量用于循环?,python,loops,variables,Python,Loops,Variables,今天我遇到了一段代码,这段代码促使我编写了这个小函数: def strangeloop(n): for n in range(1, n): print n strangeloop(10)最终打印了从1到9的数字。我的问题是,为什么循环变量与参数不冲突?Aforloop会像其他赋值一样为其循环变量赋值。您可以出于与执行此操作相同的原因执行代码: x = 2 x = 3 后面的作业只会覆盖前面的作业。在您的例子中,循环变量覆盖函数参数 请注意,范围(1,n)在循环开始之前计算一

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

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

strangeloop(10)最终打印了从1到9的数字。我的问题是,为什么循环变量与参数不冲突?

A
for
loop会像其他赋值一样为其循环变量赋值。您可以出于与执行此操作相同的原因执行代码:

x = 2
x = 3
后面的作业只会覆盖前面的作业。在您的例子中,循环变量覆盖函数参数


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

A
for
循环与任何其他赋值一样,为其循环变量赋值。您可以出于与执行此操作相同的原因执行代码:

x = 2
x = 3
后面的作业只会覆盖前面的作业。在您的例子中,循环变量覆盖函数参数


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

Pythons
for
循环与c
for
循环的工作方式不同。
range
不会将正在运行的变量与其参数进行比较。 它返回数字列表(python2)或生成这些数字的生成器

然后,for循环的
将一个又一个元素分配给运行变量

蟒蛇2:

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

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

python
for
循环与c
for
循环的工作方式不同。
range
不会将正在运行的变量与其参数进行比较。 它返回数字列表(python2)或生成这些数字的生成器

然后,for
循环的
将一个又一个元素分配给运行变量

蟒蛇2:

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

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

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

这段代码运行良好可能不那么令人惊讶,它的工作原理与此相同:

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

n
的值是传递到范围中的值,而不是变量本身,因此范围对象看不到变量
n
已更改。

答案是
range(1,n)
创建范围对象,当for循环将
n
设置为范围中的值时,覆盖函数参数
n
并不重要

这段代码运行良好可能不那么令人惊讶,它的工作原理与此相同:

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

n
的值是传递到范围中的值,而不是变量本身,因此范围对象无法看到变量
n
已更改。

请注意,重载指的是函数,而不是变量。变量被覆盖。:)请注意,重载指的是函数,而不是变量。变量被覆盖。:)我怀疑有这样的事情,但我不知道如何清楚地表达它,以便寻找它。谢谢。我怀疑有这样的事情,但我不知道如何清楚地表达它来寻找它。谢谢