Объяснение синтаксиса в цикле for?

#javascript #python #object #for-loop

#javascript #python #объект #for-цикл

Вопрос:

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

 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)
  

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

Комментарии:

1. Какое отношение это имеет к javascript?

Ответ №1:

Столкнувшись со сложным синтаксисом, добавьте операторы печати.

 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() функции.

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