有人可以解释第5行和第5行的语法吗? 16
1 # Using the generator pattern (an iterable)
2 class firstn(object):
3 def __init__(self, n):
4 self.n = n
5 self.num, self.nums = 0, []
6
7 def __iter__(self):
8 return self
9
10 # Python 3 compatibility
11 def __next__(self):
12 return self.next()
13
14 def next(self):
15 if self.num < self.n:
16 cur, self.num = self.num, self.num+1
17 return cur
18 else:
19 raise StopIteration()
20
21 sum_of_first_n = sum(firstn(1000000))
答案 0 :(得分:3)
这是元组任务;你可以分配到多个目标。
首先评估右手表达式,然后将该序列中的每个值从左到右依次分配给左侧的名称。
因此,self.num, self.nums = 0, []
将0
分配给self.num
,将[]
分配给self.nums
。
请参阅assigment statements documentation:
- 如果目标列表是以逗号分隔的目标列表:对象必须是与目标列表中的目标具有相同项目数的可迭代对象,并且项目将从左到右分配到相应的目标。
因为右侧部分是首先执行,所以计算后,cur, self.num = self.num, self.num+1
行会将self.num
分配给cur
{ {1}},已分配给self.num + 1
。如果self.num
在该行之前为self.num
,则该行5
之后为cur
,而5
为6。
答案 1 :(得分:1)
self.num, self.nums = 0, []
cur, self.num = self.num, self.num+1
这些是以下方面的缩写:
self.num = 0
self.nums = []
和
cur = self.num
self.num = self.num + 1
作为个人偏好,我不会在这两行中的任何一行中使用复合赋值。作业不相关,因此没有理由将它们组合起来。
复合指派有时候可以证明是有用的。考虑如何在C和Java等语言中交换两个数字:
temp = a
a = b
b = temp
在Python中我们可以消除临时变量!
a, b = b, a