Python 为什么1,1中的for迭代两次?

Python 为什么1,1中的for迭代两次?,python,for-loop,iterator,Python,For Loop,Iterator,为了简单起见,我在某个似乎工作正常的地方对这段代码进行了解释: for _ in 1, x: do_something() 正如你所猜测的,它应该做x倍的事情。如果x是2,那么一定要让事情发生两倍于预期。但有一天x等于1。为什么python将范围1,1视为有两个元素 >>> for x in 1,2: ... print(x) ... 1 2 >>> for x in 1,1: ... print(x) ... 1 1 有没有其他方法可以让我做

为了简单起见,我在某个似乎工作正常的地方对这段代码进行了解释:

for _ in 1, x:
  do_something()
正如你所猜测的,它应该做x倍的事情。如果x是2,那么一定要让事情发生两倍于预期。但有一天x等于1。为什么python将范围1,1视为有两个元素

>>> for x in 1,2:
...   print(x)
...
1
2
>>> for x in 1,1:
...   print(x)
...
1
1
有没有其他方法可以让我做x倍的事情?ComputerCraftEdu定义了重复构造,我认为更多的编程语言应该实现它;执行那么多次只需要一个数字,然后是一段代码。在python中如何做到这一点?

1,1是一个包含两个元素的元组,它们的值都是1。例如,考虑:

>>> for x in 0, 1, 2, 3, 4:
...   print(x)
...
0
1
2
3
4
混淆可能源于lua,其中对于x=init,max[,step]是for循环的语法:

> for x = 1, 2 do
... print(x)
... end
1
2
> for x = 1, 1 do
... print(x)
... end
1
Pylint可能应该对此发出警告,因为x的值从未使用过

可以实现重复功能:

def repeat(n, f):
  for _ in range(n):
    f()

repeat(1, lambda: print("hi"))

如果您需要范围,则必须遵循Zen 2显式优于隐式:

for _ in range(x):
  do_something()

语义,但0、1、2、3、4将创建元组而不是列表。1、x不是范围。它是两个对象:1和x。