Почему `for _ in 1,1` повторяется дважды? - PullRequest
0 голосов
/ 26 мая 2020

У меня где-то был этот фрагмент кода (перефразированный для простоты), который, казалось, работал нормально:

for _ in 1, x:
  do_something()

Как вы могли догадаться, он должен делать что-то x раз. Если x равен 2, do_something происходит дважды, как ожидалось. Но однажды 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?

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Если вам нужен диапазон, вы должны следовать Дзен 2: явное лучше, чем неявное:

for _ in range(x):
  do_something()

0 голосов
/ 26 мая 2020

1,1 - это кортеж, содержащий два элемента, оба их значения равны 1. Рассмотрим, например:

>>> for x in 0, 1, 2, 3, 4:
...   print(x)
...
0
1
2
3
4

Путаница, вероятно, проистекает из lua, в котором for x = init,max[,step] является синтаксисом для для циклов:

> 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"))
...