Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 11, 2010 14:56:05

contro
От:
Зарегистрирован: 2010-06-11
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Небольшой вопрос про аргументы функции

Берем простую функцию:

def func(a, *args, **kwargs):
print a
print args
print kwargs
вызываем:
>>> func(1, 2, 3, b=4, c=5)
1
(2, 3)
{'c': 5, 'b': 6}
всё отлично… теперь аргументы 2 и 3 объединяем в кортеж, а последние два опускаем (они больше не нужны):
args = (2, 3)
>>> func(1, *args)
1
(2, 3)
{}
тут тоже всё как и должно быть. Несложно заметить, что вызовы func(1, 2, 3) и func(1, *args) - это по сути одно и то же. Теперь пробуем заведомо неправильный вызов с именованным аргументов в начале и ожидаемо получаем ошибку:
>>> func(a=1, 2, 3)
SyntaxError: non-keyword arg after keyword arg
И теперь вопрос: почему, если вызвать функцию следующим образом, то сообщение об ошибке другое?
args = (2, 3)
>>> func(a=1, *args)
TypeError: func() got multiple values for keyword arguments 'a'
Откуда здесь множественные значения переменной ‘a’?



Офлайн

#2 Июнь 11, 2010 18:51:20

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

Небольшой вопрос про аргументы функции

http://bugs.python.org/issue8177

Подробное описание:
http://docs.python.org/dev/reference/expressions.html#calls



Отредактировано (Июнь 11, 2010 18:52:51)

Офлайн

#3 Июнь 11, 2010 23:15:02

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Небольшой вопрос про аргументы функции

оно самое - есть в Питоне места, куда разработчики не добирались. Dark Corner.
Все поправят, не беспокойтесь.



Офлайн

#4 Июнь 11, 2010 23:32:13

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Небольшой вопрос про аргументы функции

Андрей Светлов
есть в Питоне места, куда разработчики не добирались.
Я подозревал, что Гвидо не изобрел питон, а украл технологию пришельцев и теперь в ней разбирается.



Офлайн

#5 Июнь 12, 2010 00:34:26

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Небольшой вопрос про аргументы функции

pasaranax, попытайтесь изобрести _полную теорию всего_.
А я в меру своих скромных сил попробую подловить вас на нестыковках - и, конечно же, не забуду зеленых человечков ;)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version