使用" yield"在一个功能

时间:2016-01-27 18:37:04

标签: python generator yield

我希望在使用n生成的接收1个参数yield的函数中生成类似的内容:

      1
     1+2
    1+2+3
      …
      …
1+2+3+⋯+n−1+n

这是我的最后一次尝试:

def suite(n):
    total = 0
    for i in n:
        total+=i
        yield total

这就是我收到的内容:

Traceback (most recent call last):
  File "notebook", line 4, in suite
TypeError: 'int' object is not iterable

3 个答案:

答案 0 :(得分:4)

您的错误在这里:

for i in n:

n是一个整数,而不是可迭代的。也许你想在这里使用xrange()(仅限Python 2)或range()(在Python 3上推荐):

for i in range(n):

请注意,这会在 0 处开始迭代,而不是1(直到并包括n - 1)。您可以使用range(1, n + 1),也可以只为您的总和添加1:

def suite(n):
    total = 0
    for i in range(n):
        total += i + 1
        yield total

这与发电机没有任何关系;无论你是否使用yield,尝试遍历普通的int对象都无法正常工作。

答案 1 :(得分:1)

因为你的函数声明与for循环不对应。你不能迭代整数,你应该使用一些迭代。最简单的方法是使用范围:

正确的版本是:

def suite(n):
    total = 0
    for i in range(n):
        total += i
        yield total
>>>suite(6)

或者,您可以进行另一项更改以获得一些可迭代的总和:

def suite(iterable):
    total = 0
    for i in iterable:
        total += i
        yield total

>>>suite([1,2,3])

答案 2 :(得分:0)

使用range创建一个在for循环中使用的迭代器:

def suite(n):
    total = 0
    for i in range(1, n+1):
        total+=i
        yield total