def rect_extend(x):
m, n = 1
while 1 < x:
m = m + 1
n = n + 1
return m, n
这个简单的函数返回:
'int' 对象不可迭代
iPython 中的错误。我不知道为什么会这样,while
功能不起作用 - 条件似乎是true
.
(while的条件是故意简化的;原始代码没有它)
当你这样做时,m, n = 1
它被称为tuple unpacking,它的工作方式如下:
>>> m, n = ('a','b')
>>> m
'a'
>>> n
'b'
因为1
是一个整数而不是一个元组,你会得到这个奇怪的错误;因为 Python 不能“单步执行”(或迭代)一个整数来解压它。这就是错误是“int”对象不可迭代的原因
我想你想要
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
交换 和 的a
值b
。
解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