“'int'对象是不可迭代的”

时间:2013-11-03 11:53:47

标签: python integer iteration ipython

def rect_extend(x):
  m, n = 1
  while 1 < x:
    m = m + 1
    n = n + 1
  return m, n

这个简单的函数返回:

  

'int'对象不可迭代

iPython中的

错误。我不知道为什么会这样做,while函数不起作用 - 条件似乎是true

虽然的条件是故意简化的;原始代码没有它)

2 个答案:

答案 0 :(得分:6)

执行m, n = 1时,这称为tuple unpacking,它的工作方式如下:

>>> m, n = ('a','b')
>>> m
'a'
>>> n
'b'

由于1是一个整数而不是一个元组,所以你会得到这个奇怪的错误;因为Python无法“逐步”(或迭代)整数来解压缩它。这就是为什么错误是'int'对象 不可迭代

答案 1 :(得分:4)

我想你想要

m = 1
n = 1

m = n = 1

而不是m, n = 1

这(序列解包)[http://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences]:

x, y = z

会做出与您认为的不同的事情。

它实际上意味着:

x = z[0]    # The first item in z
y = z[1]    # The second element of z

例如,你可以这样做:

x, y, z = (1, 2, 4)

然后:

>>> x
1
>>> y
2
>>> z
4

在你的情况下,你这不起作用,因为1是一个整数,它没有元素,因此错误。

序列解包与元组结合使用的有用功能(以及splat运算符 - *):

此:

a, b = b, a

交换ab的值。

解包range,对常量非常有用:

>>> RED, GREEN, BLUE = range(3)
>>> RED
0
>>> GREEN
1
>>> BLUE
2

splat运算符:

>>> first, *middle, last = 1, 2, 3, 4, 5, 6, 7, 8, 9
>>> first
1
>>> middle
[2, 3, 4, 5, 6, 7, 8]
>>> last
9