1

有人可以解释第 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))
4

2 回答 2

3

那是元组赋值;您可以分配给多个目标。

首先计算右侧的表达式,然后将该序列中的每个值从左到右一个接一个地分配给左侧的名称。

因此,self.num, self.nums = 0, []分配0self.num[]self.nums

请参阅分配语句文档

  • 如果目标列表是逗号分隔的目标列表:该对象必须是与目标列表中的目标具有相同数量的项目的可迭代对象,并且项目从左到右分配给相应的目标。

因为右边部分是执行的,所以在计算之后,行cur, self.num = self.num, self.num+1赋值self.num给,赋值给。如果是在该行之前,那么在该行之后是,并且是 6。cur self.num + 1self.numself.num5cur5self.num

于 2013-10-05T22:40:14.757 回答
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
于 2013-10-05T22:40:31.333 回答