Tengo el siguiente código
num1 = 10
someBoolValue = True
Necesito establecer el valor de num1
to 20
if someBoolValue
is True
; y no hacer nada de otra manera. Entonces, aquí está mi código para eso
num1 = 20 if someBoolValue else num1
¿Hay alguna forma de evitar la ...else num1
parte para que se vea más limpia? Un equivalente a
if someBoolValue:
num1 = 20
Probé su sustitución por ...else pass
la siguiente: num1=20 if someBoolValue else pass
. Todo lo que obtuve fue un error de sintaxis. Tampoco podría omitir la ...else num1
parte.
python
if-statement
bdhar
fuente
fuente
num1 = 20 if someBoolValue else 10
. ¿Entonces guardas lanum1=10
línea también?num1
ya existe ...Respuestas:
No creo que esto sea posible en Python, ya que lo que realmente estás tratando de hacer probablemente se expanda a algo como esto:
Si excluye
else num1
, recibirá un error de sintaxis ya que estoy bastante seguro de que la asignación debe devolver algo.Como otros ya han mencionado, podría hacer esto, pero es malo porque probablemente terminará confundiéndose cuando lea ese código la próxima vez:
No soy un gran admirador del
num1 = someBoolValue and 20 or num1
por exactamente el mismo motivo. Realmente tengo que pensar dos veces en lo que está haciendo esa línea.La mejor manera de lograr lo que quieres hacer es la versión original:
La razón por la que es la mejor versión es porque es muy obvio lo que quieres hacer, y no te confundirás a ti mismo ni a nadie más que se pondrá en contacto con ese código más adelante.
Además, como nota al margen,
num1 = 20 if someBoolValue
es un código válido de Ruby, porque Ruby funciona un poco diferente.fuente
num1 = (20 if someBoolValue else num1)
.Utilizar este:
fuente
En una linea:
Pero no hagas eso. Este estilo normalmente no se espera. Las personas prefieren la forma más larga para mayor claridad y consistencia.
(Igualmente, se deben evitar las gorras de camello. Por lo tanto, úselo
some_bool_value
).Tenga en cuenta que no existe una expresión en línea
some_value if predicate
sin unaelse
parte porque no habría un valor de retorno si el predicado fuera falso. Sin embargo, las expresiones deben tener un valor de retorno claramente definido en todos los casos. Esto es diferente del uso como en, por ejemplo, Ruby o Perl.fuente
puede usar uno de los siguientes:
fuente
True
/False
, ya quebool
es una subclase deint
. En todos los casos donde la prueba devuelve algo que simplemente evaluaría verdadero, falla con una excepción. El segundo solo funciona siempre y cuandotrueVal
no se evalúe falso en sí mismo, lo que daría lugar afalseVal
ser asignado incluso si la prueba fuera verdadera.No. Supongo que esperabas que algo así
num1 = 20 if someBoolValue
funcionara, pero no es así. Creo que la mejor manera es con laif
declaración tal como la has escrito:fuente
Esa es mi nueva respuesta final. La respuesta previa fue la siguiente y fue excesivo para el problema declarado. Getting_too_clever ==
not Good
. Aquí está la respuesta anterior ... sigue siendo bueno si desea agregar una cosa paraTrue
cond y otra paraFalse
:Usted mencionó
num1
que ya tendría un valor que debería dejarse solo. Supusenum1 = 10
que esa es la primera declaración de la publicación, por lo que la operación para llegar20
es agregar10
.producido esta salida
fuente
fuente
Si desea invocar un método si algo booleano es verdadero, puede poner
else None
fin al trinario.fuente
Si definitivamente va a suceder un código de línea, Python 3.8 presenta expresiones de asignación cariñosamente conocidas como "el operador de la morsa".
Se
20
asignará anum
si la primera expresión booleana esTrue
. La asignación debe estar entre paréntesis aquí, de lo contrario obtendrá un error de sintaxis.fuente
Para el futuro viajero del tiempo de google, aquí hay una nueva forma (disponible desde Python 3.8 en adelante):
fuente
Definitivamente puede usar num1 = (20 si someBoolValue else num1) si lo desea.
fuente
Esto es lo que puedo sugerir. Use otra variable para derivar la cláusula if y asígnela a num1.
Código:
fuente
De otra manera
num1 = (20*boolVar)+(num1*(not boolVar))
fuente
Puedes hacerlo de esta manera.
Puede resolver su problema de esta manera, pero usar 'probar / excepto bloquear' no es la mejor práctica para python.
fuente