34

ここで述べたように、(関数のように)未知の数の変数を解凍するためにスターを使用できますが、Python3でのみ使用できます。

>>> a, *b = (1, 2, 3)
>>> b
[2, 3]
>>> a, *b = (1,)
>>> b
[]

Python 2.7では、私が思いつくことができる最善の方法は(ひどいわけではありませんが、迷惑です):

c = (1, 2, 3)
a, b = c[0], c[1:] if len(c) > 1 else []

除算のように__future__からこれをインポートする方法はありますか、それともpython 2.7で長さが不明な解凍を行うために独自の関数が必要ですか?

4

3 に答える 3

31

Python 2.Xでは、次のことができます。

c = (1, 2, 3)
a, b = c[0], c[1:]

c少なくとも1つのメンバーがあれば、それは機能します。なぜなら、その中に1つしかcない場合c[1:]はです[]

ただし、少なくとも1つあることを確認する必要があります。cそうしないc[0]と、例外が発生します。

あなたは次のようなことをすることができます:

try:
    c = tuple(c)
    a, b = c[0], c[1:]
except TypeError, IndexError:
    # c is not iterable, or c is iterable, but it doesn't have any stuff in it.
    # do something else
    pass
于 2012-05-29T04:16:45.613 に答える
2
(a,b) = (None, []) if not len(c) else (c[0], c[1:])

は、cが空のシーケンスである場合を処理するためのオプションでもありますが、a、bへの割り当てとして[なし]と[]を区別しません。したがって、注意して使用してください。try/exceptがおそらく最適です。

空のコンテナーを処理する場合、Python 3と2.7の間に実際の違いはわかりませんが、ここでのPython 3の優れた点は、任意の反復可能オブジェクトで機能することです。

cがジェネレーターであることがわかっている場合、これは2.7で機能します。

a,b = c.next(), c

しかし、解凍の完全な美しさにはPython3が必要なようです。

于 2013-10-04T22:31:01.577 に答える
-1

ex13.pyへの回答

from sys import argv

script=argv

def Fun(arg1, *argv): 
    print "First argument :", script 

    for arg in argv: 
        print"Your variable is:", arg

Fun('scrpit', 'first', 'second', 'third')
于 2019-03-29T02:14:26.970 に答える