返回并产生TypeError:' int'对象不可迭代

时间:2015-11-16 19:24:16

标签: python return yield

我是Python的新手。 这是我编写的用于打印x^3

的简单代码
def f(n):
    for x in range(n):
        yield x**3
for x in f(5):
    print x

哪个打印正确答案。

def f(n):
    return [x**3 for x in range(n)]
for x in f(5):
    print x

也打印正确答案

def f(n):
    for x in range(n):
        return x**3
for x in f(5):
    print x

我得到了

TypeError: 'int' object is not iterable

第三段代码出了什么问题。

4 个答案:

答案 0 :(得分:3)

volatile int myCount = -1;
Task BackgroundTask;
//rest of the code

使用def f(n): for x in range(n): yield x**3 for x in f(5): print x 将返回一个int,它不可迭代,因此不能与return x**3一起使用

答案 1 :(得分:1)

您为函数f(n)编写的第三个代码:

实际上返回一个整数。

错误建议不可迭代。

测试它的一个简单方法是打开python shell

并复制您的代码

def f(n):
    for x in range(n):
        return x**3

f(5)

输出:

0

和0不可迭代。所以错误信息。

使其工作只需更改方法以返回数组或任何可迭代对象。

def f(n):
    for x in range(n):
        return [x**3]

f(5)

输出:

[0]

答案 2 :(得分:0)

如果我理解你的目标,我认为你在这里遇到一些问题。

(1)当你以你的方式重建某个东西时,没有理由使用循环。

def cube(n):
    return n**3

(2)要打印输出,只需打印输出,就不需要循环输出。

print cube(5)

(3)如果要打印多维数据集列表。

for x in xrange(5):
    print cube(x)

(4)你可能不想使用收益率,因为它returns a generator object,它看起来不像你想要的那样。

答案 3 :(得分:0)

def f(n):
    for x in range(n):
        return x**3

此函数返回整数而不是列表

f(5)将等于0 ^ 3(循环将在第一次迭代中退出),因为您可以看到它是一个整数, 因此无法迭代。

相关问题