Я ищу способ определить, было ли передано ключевое слово arg явно, без использования **kwargs
.Обнаружение переопределения kwarg в Python
Вот пример:
def foo(first, second=None):
pass
Если в этой функции, я считаю, что second
содержит None
, есть ли способ узнать, был ли что None
от заданного по умолчанию, или был принят в явном виде? В принципе, у меня есть необязательный аргумент, который, возможно, может быть любым значением или типом. Поэтому мне либо нужно какое-то «уникальное» значение по умолчанию, так что пользователь никогда не намеренно передает это значение по умолчанию, или мне нужен способ определить, действительно ли аргумент передавался явно.
Я ожидал, что смогу открыть его, проверив стек, но я чувствую, что это слишком много.
Я также знаю, что я мог бы сделать это таким образом:
def foo(first, **kwargs):
if 'second' in kwargs:
# Overridden!
pass
Но я бы предпочел не принимать **kwargs
, как это делает моя функция подписи менее полезна и может скрыть ошибки.
Недостаточно использовать '** kwargs', который не является ужасным, а затем использовать значение * sentinel * ... например,' sentinel = object() 'и проверить' if second is not sentinel' ... –