Установка значения по умолчанию вход функции на равную другую вход в Python

StackOverflow https://stackoverflow.com/questions/3534371

Вопрос

Рассмотрим следующую функцию, которая не работает в 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top