Почему делает x, y =, zip (*zip (a, b)) работают в Python?

Хорошо я люблю Python zip() функция. Используйте все это время, это является блестящим. Время от времени я хочу сделать противоположность zip(), думайте, что "Я раньше знал, как сделать это", затем Python Google разархивировал, затем помнит, что каждый использует это волшебное * разархивировать заархивированный список кортежей. Как это:

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 являются настолько таинственными и твердыми к Google?

75
задан Beska 24 March 2010 в 20:55
поделиться

3 ответа

Звездочка в Python документирована в учебнике по Python, в разделе Распаковка списков аргументов.

39
ответ дан 24 November 2019 в 11:43
поделиться

Это также полезно для нескольких аргументов:

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}

Довольно аккуратные и полезные вещи.

8
ответ дан 24 November 2019 в 11:43
поделиться

Звездочка выполняет apply (как это известно в Lisp и Scheme). По сути, он берет ваш список и вызывает функцию с содержимым этого списка в качестве аргументов.

18
ответ дан 24 November 2019 в 11:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: