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