Объяснение синтаксиса в для цикла? - PullRequest
0 голосов
/ 29 сентября 2011

Я пытался решить некоторые задачи на проекторе, и я добрался до задачи с суммой квадратов и квадратов сумм.Я не хотел грубой силы, поэтому я посмотрел решение, которое было:

sum1 = 0
sum2 = 0

for i in ((x,x ** 2) for x in range(1,100+1)):
    sum1 += i[0]
    sum2 += i[-1]

print(sum1 ** 2 - sum2)

Я не получаю:

(x,x ** 2) for x in range(1,100+1)

Я видел это в другомКод для игры в гольф тоже в JavaScript.Это определенный синтаксис или незнакомый способ чего-то регулярного?Может кто-нибудь объяснить, пожалуйста?

1 Ответ

4 голосов
/ 29 сентября 2011

В случае сложного синтаксиса добавьте операторы печати. ​​

for i in ((x,x ** 2) for x in range(1,100+1)):
    print i

Не слишком полезно.

Попробуйте это.

a = ((x,x ** 2) for x in range(1,100+1))
print a
for i in a:
     print i

Полезный? Может быть.

Попробуйте это:

a = ((x,x ** 2) for x in range(1,100+1))
b = list(a)
print b

Хм. Перестает работать и цикл for i in a. Этот генераторный объект , кажется, делает это только один раз. Либо в цикле for, либо в функции list() (или tuple()), но не в обоих.

Попробуйте это.

 for x in range(1,100+1): 
      print x, x**2

Хорошо. Итак, что мы узнали?

((x,x ** 2) for x in range(1,100+1)) является выражением генератора. http://www.python.org/dev/peps/pep-0289/

Это "итерируемый" и может использоваться в операторе for или функции list().

Кроме того, мы научились добавлять операторы печати для изучения запутанного синтаксиса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...