Установка значения по умолчанию для входа функции, равного другому входу в Python - PullRequest
18 голосов
/ 20 августа 2010

Рассмотрим следующую функцию, которая не работает в Python, но я буду использовать, чтобы объяснить, что мне нужно сделать.

def exampleFunction(a, b, c = a):
    ...function body...

То есть я хочу присвоить переменной c то же значениеэта переменная a будет принимать, если не указано альтернативное значение.Приведенный выше код не работает в Python.Есть ли способ сделать это?

Спасибо.

Ответы [ 3 ]

25 голосов
/ 20 августа 2010
def exampleFunction(a, b, c = None):
    if c is None:
        c = a
    ...function body...

Значение по умолчанию для аргумента ключевого слова не может быть переменной (если оно есть, оно преобразуется в фиксированное значение при определении функции.) Обычно используется для передачи аргументов основной функции:

def main(argv=None):
    if argv is None:
        argv = sys.argv
14 голосов
/ 20 августа 2010

Этот общий шаблон, вероятно, является лучшим и наиболее читаемым:

def exampleFunction(a, b, c = None):
    if c is None:
        c = a
    ...

Вы должны быть осторожны, что None не является допустимым состоянием для c.

Если выЕсли вы хотите поддерживать значения None, вы можете сделать что-то вроде этого:

def example(a, b, *args, **kwargs):
    if 'c' in kwargs:
        c = kwargs['c']
    elif len(args) > 0:
        c = args[0]
    else:
        c = a
1 голос
/ 20 августа 2010

Один подход - это что-то вроде:

def foo(a, b, c=None):
    c = a if c is None else c
    # do something
...