Хорошо я люблю 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?
Звездочка в Python документирована в учебнике по Python, в разделе Распаковка списков аргументов.
Это также полезно для нескольких аргументов:
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}
Довольно аккуратные и полезные вещи.
Звездочка выполняет apply
(как это известно в Lisp и Scheme). По сути, он берет ваш список и вызывает функцию с содержимым этого списка в качестве аргументов.