Python star unpacking for version 2.7

前端 未结 3 370
礼貌的吻别
礼貌的吻别 2020-12-06 03:59

As mentioned here, you can use the star for unpacking an unknown number of variables (like in functions), but only in python 3:

>>> a, *b = (1, 2, 3         


        
相关标签:
3条回答
  • 2020-12-06 04:24

    answer to 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')
    
    0 讨论(0)
  • 2020-12-06 04:29

    in python 2.X, you can do:

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

    as long as c has at least one member it will work because if c only has 1 thing in it c[1:] is [].

    You should probably make sure there is at least one thing in c though, or else c[0] will raise an exception.

    You could do something like:

    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
    
    0 讨论(0)
  • 2020-12-06 04:32
    (a,b) = (None, []) if not len(c) else (c[0], c[1:])
    

    is also an option for handling the case where c is an empty sequence, although it won't distinguish between [None] and [] in terms as assignments to a, b. So use it with care, the try / except is probably best.

    I can see no real difference between Python 3 and 2.7 when handling an empty container, but the nice thing about Python 3 here is it works with any iterable.

    This works in 2.7 if you know c is a generator.

    a,b = c.next(), c
    

    But the full beauty of unpacking seems to require Python 3.

    0 讨论(0)
提交回复
热议问题