#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()
функции.
Кроме того, мы научились добавлять операторы печати, чтобы исследовать запутанный синтаксис.