Установка значения по умолчанию вход функции на равную другую вход в Python
-
30-09-2019 - |
Вопрос
Рассмотрим следующую функцию, которая не работает в Python, но я буду использовать, чтобы объяснить, что мне нужно сделать.
def exampleFunction(a, b, c = a):
...function body...
То есть я хочу назначить переменную c
то же значение, что переменная a
займет, если не указано альтернативное значение. Приведенный выше код не работает в Python. Есть ли способ сделать это?
Спасибо.
Решение
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
магия как в ответе Карла или использовать Sentinel Object.. Отказ Библиотеки, которые делают это включают привлекать а также зефирка, И на мой взгляд, это намного чище и скорее всего быстрее.
missing = object()
def example(a, b, c=missing):
if c is missing:
c = a
...
То Только способ c is missing
быть правдой для c
быть точно Этот пустой объект вы создали там.
Другие советы
Этот общий шаблон, вероятно, лучший и самый читаемый:
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
Один подход - это что-то вроде:
def foo(a, b, c=None):
c = a if c is None else c
# do something