Найти - Пользователи
Полная версия: Небольшой вопрос про аргументы функции
Начало » Python для новичков » Небольшой вопрос про аргументы функции
1
contro
Берем простую функцию:
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’?
magnet85
http://bugs.python.org/issue8177

Подробное описание:
http://docs.python.org/dev/reference/expressions.html#calls
Андрей Светлов
оно самое - есть в Питоне места, куда разработчики не добирались. Dark Corner.
Все поправят, не беспокойтесь.
pasaranax
Андрей Светлов
есть в Питоне места, куда разработчики не добирались.
Я подозревал, что Гвидо не изобрел питон, а украл технологию пришельцев и теперь в ней разбирается.
Андрей Светлов
pasaranax, попытайтесь изобрести _полную теорию всего_.
А я в меру своих скромных сил попробую подловить вас на нестыковках - и, конечно же, не забуду зеленых человечков ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB