2010-08-20 2 views
16

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

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

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

спасибо.

ответ

22
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 
+0

Ровно. Аргументы по умолчанию задаются в камне после определения функции. – delnan

+0

@delnan Является ли причина, по которой в конце концов не могу поставить аргумент set по умолчанию, отличный от def (x = 2, y)? А мне нужно определить функцию как def (y, x = 2) '? – SIslam

1

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

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

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

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 
+2

+1 за то, что упоминание о том, что 'None' не может быть допустимым состоянием для' c' для трюка 'c = None' для работы. – aaronasterling