Установка значения по умолчанию для ввода функции для равного другого входа в Python
Рассмотрим следующую функцию, которая не работает в Python, но я буду использовать, чтобы объяснить, что мне нужно делать.
def exampleFunction(a, b, c = a):
...function body...
То есть я хочу назначить переменной c
то же значение, которое примет переменная a
, если не указано альтернативное значение. Вышеприведенный код не работает в python. Есть ли способ сделать это?
Спасибо.
Ответы
Ответ 1
def example(a, b, c=None):
if c is None:
c = a
...
Значением по умолчанию для аргумента ключевого слова не может быть переменная (если оно есть, оно преобразуется в фиксированное значение при определении функции.) Обычно используется для передачи аргументов основной функции:
def main(argv=None):
if argv is None:
argv = sys.argv
Если None
может быть допустимым значением, решение состоит в том, чтобы либо использовать магию *args
/**kwargs
, как в ответе Карла, либо использовать часовой объект. К таким библиотекам относятся attrs и Marshmallow, и, на мой взгляд, это намного чище и, вероятно, быстрее.
missing = object()
def example(a, b, c=missing):
if c is missing:
c = a
...
Единственный способ для c is missing
быть истинным - это для c
именно тот фиктивный объект, который вы там создали.
Ответ 2
Этот общий шаблон, вероятно, является лучшим и наиболее читаемым:
def exampleFunction(a, b, c = None):
if c is None:
c = a
...
Вы должны быть осторожны, что None
не является допустимым состоянием для c
.
Если вы хотите поддерживать значения "Нет", вы можете сделать что-то вроде этого:
def example(a, b, *args, **kwargs):
if 'c' in kwargs:
c = kwargs['c']
elif len(args) > 0:
c = args[0]
else:
c = a
Ответ 3
Один подход - это что-то вроде:
def foo(a, b, c=None):
c = a if c is None else c
# do something