Я мечтаю о методе Python с явными аргументами ключевого слова:
def func(a=None, b=None, c=None):
for arg, val in magic_arg_dict.items(): # Where do I get the magic?
print '%s: %s' % (arg, val)
Я хочу получить словарь только тех аргументов, которые вызывающий объект фактически передал в метод, как **kwargs
, но я не хочу, чтобы вызывающий мог передавать любые старые случайные аргументы, в отличие от **kwargs
.
>>> func(b=2)
b: 2
>>> func(a=3, c=5)
a: 3
c: 5
Итак: есть ли такое заклинание? В моем случае я могу сравнить каждый аргумент с его аргументом по умолчанию, чтобы найти отличающиеся друг от друга аргументы, но это отчасти неуместно и утомительно, когда у вас есть девять аргументов. Для бонусных баллов предоставьте заклинание, которое может сообщить мне, даже когда вызывающий абонент передает аргумент ключевого слова, которому присвоено значение по умолчанию:
>>> func(a=None)
a: None
Трикси!
Редактировать: Подпись (лексической) функции должна оставаться неизменной. Это часть общедоступного API, и основная ценность явных аргументов ключевых слов заключается в их документальной ценности. Просто чтобы сделать вещи интересными. :)