Я мечтаю о методе 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, и основная ценность явных аргументов ключевого слова заключается в их документальной ценности. Просто чтобы было интересно. :)