Esta podría ser una pregunta básica porque todavía estoy aprendiendo Python. Pero supongamos que quiero hacer algo como esto,
def add(a, b):
return a + b
a, b, c, d = 1, 2, 3, 4
sum = add(a, b if b == 2 else c, d)
Básicamente, estoy tratando de pasar múltiples argumentos funcionales desde el interior de un operador ternario (y quiero una solución similar, si es posible). Este código actualmente da el siguiente error:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add() takes 2 positional arguments but 3 were given
¿Qué más he probado?
add((a, b) if b == 2 else (c, d))
add(*(a, b) if b == 2 else *(c, d))
5 respuestas
Qué dices
add(*(a, b) if b == 9 else (c, d))
Esto es similar a
add(*((a, b) if b == 9 else (c, d)))
sum_ = add(a, b) if b==2 else add(c, d)
Declaración anterior es equivalente a
sum_ = 0
if b==2:
sum_ = add(a, b)
else:
sum_ = add(c, d)
Si está confundido, es mejor escribir una declaración completa y luego tratar de hacerlo simple y en Turney.
Además, se recomienda no utilizar la función incorporada para el nombre de la variable
Sum toma dos argumentos, pero está intentando pasar más que eso.
Utilice lo siguiente para su problema:
sum = add(a, b) if b == 2 else add(c, d)
>>> add(*((a, b) if b == 2 else (c, d)))
3
Como se señaló en los comentarios, el hecho de que necesite tantos parens para hacer esto es una buena señal de que esta no es una buena manera de estructurar este código.
El problema está en el argumento de función, declaras una función con 2 variables pero pasas 3, lo que entiendo es que pasas el argumento a la función y devuelve la suma del argumento, puedes hacer esto
def add(*args):
return sum(args)
a, b, c, d = 1, 2, 3, 4
value = add(a, b if b == 2 else c, d)
* no declare la suma como variable, es una función incorporada de python *
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.