2016-02-12 6 views
0

Предположим, что у меня есть функция, которая принимает два аргумента: x и y. Если y не указан, тогда я создам значение по умолчанию, основанное на x. Конечно, я не мог определить функцию с def myfunc(x, y=x+1), потому что значение по умолчанию было бы оценено в определении функции функции, а не когда она вызывается. Вместо этого я бы определил функцию с def myfunc(x, y=None), и в моей функции тела проверьте, является ли yNone, и если это так, переопределите y до x + 1. Что делать, если y будет ничего? Что делать, если даже значение None было возможным? Есть ли способ, которым я мог бы отличить myfunc(4) и myfunc(4, None), хотя значение по умолчанию для y равно None?Функция Python, вызванная аргументом по умолчанию, отличная от аргумента Нет

+0

Ваша функция не может справиться с «ничего» так установить по умолчанию то, что никогда не будет передано или что вы знаете, что не будете обрабатывать. – Fredrik

+0

@FredrikRosenqvist Что делать, если это был новый вид последовательности? – zondo

+0

Что вы подразумеваете под последовательностью? Приведите пример – Fredrik

ответ

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

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

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