[英]Need help understanding python syntax
有人可以解释第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))
这是元组任务; 您可以分配给多个目标。
首先评估右侧表达式,然后将该序列中的每个值从左到右依次分配给左侧的名称。
因此, self.num, self.nums = 0, []
受让人0
至self.num
并[]
至self.nums
。
- 如果目标列表是以逗号分隔的目标列表:对象必须是具有与目标列表中的目标相同数量的项目的可迭代项,并且项目将从左到右分配给相应的目标。
因为首先执行右侧部分,所以行cur, self.num = self.num, self.num+1
在计算self.num + 1
后将 self.num + 1
self.num
给cur
,该值被分配给self.num
。 如果self.num
在该行之前是5
,那么在该行之后cur
是5
,并且self.num
是6。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.