как работает unpacking?

 
0
 
Python
ava
batigoal | 01.04.2010, 16:14
Всем привет,

использую сейчас Django, повсеместно встречаю функции такого вида:


def function(**kwargs):
...


Что это означает? Официальная документация содержит только обратный пример - использование ** при вызове функции. Но как интерпретировать это объявление? И как доступаться до содержимого kwargs?

später ergänzt:
Так, разобрался. Доступаться так:

value = kwargs['key']

Тогда остается вопрос, нах эти **? Я могу написать просто def function(kwargs): и точно так же передавать dictionary аргументом.

später ergänzt:
Нашел ответ: http://www.saltycrane.com/blog/2008/01/how...args-in-python/. И чего это в официальный туториал не вписать...
Kommentare (4)
ava
GoldFinch | 01.04.2010, 17:16 #
batigoal, читай туториал еще раз, раздел про функции.
ava
batigoal | 02.04.2010, 08:31 #
GoldFinch, имеешь в виду вот этот фрагмент, или я что-то упустил?

Цитата


4.7.4. Unpacking Argument Lists



The reverse situation occurs when the arguments are already in a list or tuple but need to be unpacked for a function call requiring separate positional arguments. For instance, the built-in range() function expects separate start and stop arguments. If they are not available separately, write the function call with the *-operator to unpack the arguments out of a list or tuple:





>>> range(3, 6)  # normal call with separate arguments

[3, 4, 5]

>>> args = [3, 6]

>>> range(*args)  # call with arguments unpacked from a list

[3, 4, 5]





In the same fashion, dictionaries can deliver keyword arguments with the **-operator:





>>> def parrot(voltage, state='a stiff', action='voom'):

... print "-- This parrot wouldn't", action,

... print "if you put", voltage, "volts through it.",

... print "E's", state, "!"

...

>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}

>>> parrot(**d)

-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised





Если да, то он не отвечает на мой вопрос, т.к. описывает только обратную ситуацию.
ava
GoldFinch | 02.04.2010, 10:00 #
batigoal, я имею в виду
4.7.2. Keyword Arguments (http://docs.python.org/py3k/tutorial/controlflow.html#keyword-arguments)
Цитата


When a final formal parameter of the form **name is present, it receives a dictionary (see Mapping Types — dict) containing all keyword arguments except for those corresponding to a formal parameter.

ava
batigoal | 02.04.2010, 10:20 #
GoldFinch, да, точно, есть описание. Был неправ.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden