Вы можете использовать стандартные значения для аргументов в случае снабжения их аннотациями — аннотация (и ее символ
:) появляется перед стандартным значением (и символом
=). В показанном ниже коде а:
'spam' = 4 означает, что аргумент а имеет стандартное значение 4 и аннотирован строкой
'spam':
>>> def func(a: 'spam' = 4, b: (1, 10) = 5, c: float = 6) -> int:
>>> return a + b + c
>>> func (1, 2, 3)
... 6
>>> func() # 4 + 5 + 6 (все стандартные значения)
... 15
>>> func(1, с=10) # 1+5 + 10 (ключевые аргументы нормально работают)
... 16
>>> func.__annotations__
{'с': <class 'float;>, 'b': (1, 10), 'a': 'spam', 'return': class 'int'>}