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

この単純な関数は次を返します。

'int' オブジェクトは反復可能ではありません

iPython のエラー。なぜこれを行うのかわかりません。while機能が動作しません - 状態のようですtrue

( whileの条件は意図的に単純化されています。元のコードにはありません)

4

2 に答える 2

6

これを行うと、タプルのアンパックm, n = 1と呼ばれ、次のように機能します。

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

1はタプルではなく整数であるため、この奇妙なエラーが発生します。Pythonは整数を「ステップスルー」(または反復)して展開できないためです。そのため、エラーは 'int' object is not iterableです

于 2013-11-03T11:59:05.590 に答える
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整数であり、要素がないため、エラーが発生します。

タプル (およびスプラット演算子 - ) と組み合わせたシーケンス アンパックの便利な機能*:

これ:

a, b = b, a

aとの値を交換しますb

アンパックrange、定数に便利:

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

スプラット演算子:

>>> first, *middle, last = 1, 2, 3, 4, 5, 6, 7, 8, 9
>>> first
1
>>> middle
[2, 3, 4, 5, 6, 7, 8]
>>> last
9
于 2013-11-03T11:55:14.200 に答える