Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 10, 2008 10:28:06

offline
От:
Зарегистрирован: 2007-04-24
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

setdefault

Что то не могу понять как работает такая конструкция

a = {}
a.setdefault("a", []).append(['1','2'])
print a
{'a': [['1', '2']]}
Вроде бы “a” является словарём, метода append у него быть не должно.. В доке написано a.setdefault(k) a if k in a, else x (also setting it)
Кто нибудь может прояснить эту магию?



Офлайн

#2 Сен. 10, 2008 11:02:15

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

setdefault

>>> help({}.setdefault)
Help on built-in function setdefault:

setdefault(...)
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
Опытном путем, если документация не помогает, определи что возвращает setdefault, а потом скажи мне, почему ты решил, что этот метод возвращает словарь, а не значение по ключу ‘a’.

..bw



Офлайн

#3 Сен. 10, 2008 11:07:07

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

setdefault

a.setdefault(“a”, )
устанавливает a={“a”:}, т.е. обращение происходит к a и присваивает значение , т.к. такого ключа ещё не было.
и возвращает значение a =

список a= получает команду append
т.е. в список добавляется список.

итого: получаем то, что получили



Офлайн

#4 Сен. 10, 2008 11:59:13

offline
От:
Зарегистрирован: 2007-04-24
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

setdefault

Всем спасибо, теперь понял.



Офлайн

#5 Сен. 11, 2008 10:14:01

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

setdefault

bw
>>> help({}.setdefault)
можно получить то же самое так:
{}.setdefault.__doc__
у меня req.write( str(help( {}.setdefault ))) выдаёт None, а req.write( {}.setdefault.__doc__) показывает документацию



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version