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))
0
zean_7 22 ene. 2021 a las 23:11

5 respuestas

La mejor respuesta

Qué dices

add(*(a, b) if b == 9 else (c, d))

Esto es similar a

add(*((a, b) if b == 9 else (c, d)))
0
Epsi95 22 ene. 2021 a las 20:19

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

1
sahasrara62 22 ene. 2021 a las 20:13

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)
0
Krishna Chaurasia 22 ene. 2021 a las 20:15
>>> 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.

0
Samwise 22 ene. 2021 a las 20:16

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 *

0
Belhadjer Samir 22 ene. 2021 a las 20:29
65852119