为什么x,y = zip(* zip(a,b))在Python中起作用?

好的,我喜欢Python的zip()函数。 一直使用它,它很棒。 我现在想再做一次与zip()相反的操作,认为“我曾经知道如何做到这一点”,然后google python解压缩,然后记住用这个神奇的*来解压缩一个压缩的元组列表。 喜欢这个:

x = [1,2,3]
y = [4,5,6]
zipped = zip(x,y)
unzipped_x, unzipped_y = zip(*zipped)
unzipped_x
    Out[30]: (1, 2, 3)
unzipped_y
    Out[31]: (4, 5, 6)

究竟是怎么回事? 这个神奇的星号在做什么? 还有什么地方可以应用它,以及Python中其他令人惊叹的令人惊叹的事情对谷歌来说如此神秘又难以应付?


Python中的星号记录在Python教程中的Unpacking Argument Lists下。


星号执行apply (在Lisp和Scheme中已知)。 基本上,它需要你的列表,并以该列表的内容作为参数调用该函数。


它对多个参数也很有用:

def foo(*args):
  print args

foo(1, 2, 3) # (1, 2, 3)

# also legal
t = (1, 2, 3)
foo(*t) # (1, 2, 3)

而且,对于关键字参数和字典,可以使用双星号:

def foo(**kwargs):
   print kwargs

foo(a=1, b=2) # {'a': 1, 'b': 2}

# also legal
d = {"a": 1, "b": 2}
foo(**d) # {'a': 1, 'b': 2}

当然,你可以结合这些:

def foo(*args, **kwargs):
   print args, kwargs

foo(1, 2, a=3, b=4) # (1, 2) {'a': 3, 'b': 4}

漂亮整洁有用的东西。

链接地址: http://www.djcxy.com/p/53583.html

上一篇: Why does x,y = zip(*zip(a,b)) work in Python?

下一篇: Can I use a class instead of a function with map in Python?