Argumentos mutuamente excluyentes en Python
¿Cuál es la mejor manera de definir una función que depende de argumentos excluyentes entre sí, es decir, un conjunto de argumentos en los que solo necesito especificar uno a la vez? Un ejemplo sencillo sería una función que tome un parámetro físico como entrada, por ejemplo, la frecuencia. Ahora quiero que el usuario pueda especificar directamente la frecuencia o en su lugar la longitud de onda, de modo que puedan llamar igualmente a la función de la siguiente manera:
func(freq=10)
func(wavelen=1).
Una opción serían los kwargs, pero ¿hay una mejor manera (en cuanto a las docstrings, por ejemplo)?
davy.ai
Una forma de definir una función que depende de argumentos mutuamente excluyentes es usar **kwargs, donde la función tiene un conjunto de argumentos predeterminados y también acepta cualquier argumento nombrado que se le pase.
Por ejemplo:
La desventaja de usar **kwargs es que puede no ser claro para el usuario qué argumentos están permitidos o son obligatorios, y también la firma de la función puede no ser clara en la cadena de documentación.
Un enfoque alternativo es usar un solo argumento requerido y establecer los otros argumentos como opcionales con valores predeterminados. Esto se puede explicar claramente en la cadena de documentación.
Por ejemplo:
En este caso, se requiere que el usuario especifique el parámetro físico y también puede especificar opcionalmente la frecuencia o la longitud de onda. La cadena de documentación deja claro que solo se debe especificar una de las opciones freq o wavelen.