2011-10-07 13 views
5

Vi this question pero usa el ?? operador como una verificación nula, quiero usarlo como una prueba bool verdadero/falso.Versión de Python del operador condicional de C# (?)

tengo este código en Python:

if self.trait == self.spouse.trait: 
    trait = self.trait 
else: 
    trait = defualtTrait 

En C# podría escribir esto como:

trait = this.trait == this.spouse.trait ? this.trait : defualtTrait; 

¿Hay una manera similar a hacerlo en Python?

+1

En C# sólo se necesita el? operador para hacer eso. –

+0

En C# Parece que estás usando el ?? operador donde de otra manera podría usar el? operador. De todos modos, si tu código funciona, y lo entiendes, no veo ninguna razón para desviarse. Es explícito y claro. Claro, podrías convertirlo en un juego de una sola línea, como algunos han demostrado, pero el resultado es efectivamente el mismo. –

+0

@WinstonEwert tiene toda la razón. Mi error. Editaré mi pregunta para que sea útil para otras personas. –

Respuesta

10

Sí, se puede escribir:

trait = self.trait if self.trait == self.spouse.trait else defaultTrait 

Esto se llama un Conditional Expression en Python.

1

En el operador nulo-coalescente en C#, lo que tiene en la pregunta no es un uso correcto. Eso fallaría en tiempo de compilación.

En C#, la forma correcta de escribir lo que estás intentando sería la siguiente:

trait = this.trait == this.spouse.trait ? self.trait : defaultTrait 

se unen nulo en C# devuelve el primer valor que no es nulo en una cadena de valores (o nulo si no hay valores no nulos). Por ejemplo, lo que se escribe en C# para devolver el primer rasgo que no sea nulo o un rasgo predeterminado si todos los demás eran nulas en realidad es la siguiente:

trait = this.spouse.trait ?? self.trait ?? defaultTrait; 
+0

Correcto, estaba pensando en el operador condicional: y escribí el ?? operador nulo-coalescente Mi error. –

Cuestiones relacionadas