Предположим, что у меня есть функция, которая принимает два аргумента: x
и y
. Если y
не указан, тогда я создам значение по умолчанию, основанное на x
. Конечно, я не мог определить функцию с def myfunc(x, y=x+1)
, потому что значение по умолчанию было бы оценено в определении функции функции, а не когда она вызывается. Вместо этого я бы определил функцию с def myfunc(x, y=None)
, и в моей функции тела проверьте, является ли y
None
, и если это так, переопределите y
до x + 1
. Что делать, если y
будет ничего? Что делать, если даже значение None
было возможным? Есть ли способ, которым я мог бы отличить myfunc(4)
и myfunc(4, None)
, хотя значение по умолчанию для y
равно None
?Функция Python, вызванная аргументом по умолчанию, отличная от аргумента Нет
0
A
ответ
2
Если вам действительно нужно знать, что это не установлено, что это так:
NOT_SET = object()
def f(x, y=NOT_SET):
if y is NOT_SET:
# y is not set
Это работает из-за этого:
>>> a = object()
>>> b = object()
>>> a is b
False
+1
Может быть даже лучше использовать 'if y is NOT_SET:', это проверяет идентификацию объекта вместо равенства. –
+0
@ GeorgSchölly Вы правы, я отредактировал свой ответ. – Fredrik
Ваша функция не может справиться с «ничего» так установить по умолчанию то, что никогда не будет передано или что вы знаете, что не будете обрабатывать. – Fredrik
@FredrikRosenqvist Что делать, если это был новый вид последовательности? – zondo
Что вы подразумеваете под последовательностью? Приведите пример – Fredrik