2010-08-20 28 views
16

Considere la siguiente función, que no funciona en Python, pero la usaré para explicar lo que debo hacer.Establecer el valor predeterminado de una entrada de función para igualar otra entrada en Python

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

Eso es que quiero para asignar a la variable c el mismo valor que la variable a llevaría, a menos que se especifique un valor alternativo. El código anterior no funciona en Python. ¿Hay alguna forma de hacer esto?

Gracias.

Respuesta

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

El valor por defecto para el argumento de palabra clave no puede ser una variable (si lo es, se convierte en un valor fijo cuando se define la función.) Comúnmente se usa para pasar argumentos a una función principal:

def main(argv=None): 
    if argv is None: 
     argv = sys.argv 
+0

Exactamente. Los argumentos predeterminados se configuran en piedra una vez que se define la función. – delnan

+0

@delnan ¿Es esta la razón por la cual no se puede suministrar el argumento del conjunto no predeterminado como 'def (x = 2, y)' sino que tengo que definir la función como 'def (y, x = 2)'? – SIslam

1

Un enfoque es algo así como:

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

Este patrón general es probablemente la mejor y más legible:

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

Debe tener cuidado de que None no sea un estado válido para c.

Si desea apoyar los valores 'Ninguno', se puede hacer algo como esto:

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 por mencionar que 'Ninguno' no puede ser un estado válido para que' c' funcione el truco 'c = None'. – aaronasterling

Cuestiones relacionadas