2012-09-11 1 views
3

Предположим, что функция spam имеет подпись spam(ham=None). Следующие три вызова будет все вызвать локальную переменную ham в пространстве имен spam «s иметь значение None:Как функция Python может определить, было ли (и как) выполнено значение kwarg по умолчанию?

spam() 
spam(None) 
spam(ham=None) 

Как spam узнать, какой из этих трех вариантов на самом деле использовал?

+2

Зачем вам нужно знать? –

+1

Зачем вам нужно знать, почему мне нужно знать? – kjo

+1

Потому что это злая вещь по причинам, объясняемым @BrenBarn. –

ответ

7

Не может. This question описывает способ использования декоратора для обертывания функции и установки переданных аргументов в качестве атрибутов. Но нет никакого способа узнать изнутри spam без помощи извне. Вы должны перехватить вызов с помощью функции, принимающей **kwargs, и использовать ее для хранения информации.

Однако вы должны быть осторожны в этом. Различные способы прохождения в аргументах: предположительно работать одинаково. Если вы делаете что-то, что заставляет их работать по-другому, вы будете путать многих людей, которые пытаются использовать вашу функцию.

 Смежные вопросы

  • Нет связанных вопросов^_^