【问题标题】:return and yield TypeError: 'int' object is not iterablereturn and yield TypeError: 'int' object is not iterable
【发布时间】:2016-02-18 00:01:38
【问题描述】:

我是 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

那么第三段代码有什么问题。

【问题讨论】:

  • f(5) 返回一个整数
  • 第三个 f 返回一个 int ONCE(第一次迭代)(提醒调用 return 将立即退出一个方法)
  • 你的其他两个函数返回一个 i。迭代器和一个 ii。列表
  • 感谢 R Nar。这正是我想了解的。

标签: python return yield


【解决方案1】:
def f(n):
    for x in range(n):
        yield x**3
for x in f(5):
    print x

使用return x**3 将返回一个int,它不可迭代,因此不能与for 一起使用

【讨论】:

    【解决方案2】:

    您为函数 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]
    

    【讨论】:

      【解决方案3】:

      如果我理解你的意思,我认为你有一些问题。

      (1) 当你以你的方式做立方体时,没有理由使用循环。

      def cube(n):
          return n**3
      

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

      print cube(5)
      

      (3) 如果要打印立方体列表。

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

      (4) 你可能不想使用yield,因为它returns a generator object,这似乎不是你想要的。

      【讨论】:

        【解决方案4】:
        def f(n):
            for x in range(n):
                return x**3
        

        这个函数返回一个整数而不是一个列表

        f(5) 将等于 0^3 (循环将在第一次迭代中退出),如您所见,它是一个整数,并且 因此无法迭代。

        【讨论】:

        • 这是错误的。 f(5) 将等于 0^3 并将返回 0。
        • 是的 Vikash,你是对的,它只会是 0^3,因为在第一次迭代循环中,一旦它获得 return 就会退出,我正在根据您的反馈更改解决方案,感谢您指出
        猜你喜欢
        • 2019-04-12
        • 2022-11-02
        • 2018-06-29
        • 2020-11-07
        • 2016-01-09
        • 2018-12-10
        • 1970-01-01
        • 2022-12-15
        • 2020-07-20
        相关资源
        最近更新 更多