Pregunta

Tenga en cuenta la siguiente función, que no funciona en Python, pero voy a utilizar para explicar lo que tengo que hacer.

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

Eso es lo desee 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 una manera de hacer esto?

Gracias.

¿Fue útil?

Solución

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

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

Si None podría ser un valor válido, la solución es o bien el uso *args / magia **kwargs como en la respuesta de Carl, o utilizar un objeto centinela . Las bibliotecas que hacen esto incluyen attrs y Marshmallow , y en mi opinión, es mucho más limpio y probablemente más rápido.

missing = object()

def example(a, b, c=missing):
    if c is missing:
        c = a
    ...

El solamente camino para c is missing es cierto es que c sea exactamente que objeto ficticio que creó allí.

Otros consejos

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

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

Hay que tener cuidado de que None no es un estado válido para c.

Si desea que los valores al apoyo 'none', 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

Uno de los enfoques es algo como:

def foo(a, b, c=None):
    c = a if c is None else c
    # do something
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top