2011-10-07 17 views
5

Ho visto this question ma usa il ?? operatore come controllo nullo, voglio usarlo come test vero/falso bool.Versione Python dell'operatore condizionale di C# (?)

Ho questo codice in Python:

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

In C# ho potuto scrivere questo come:

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

C'è un modo simile per fare questo in Python?

+1

In C# è necessario solo il? operatore per farlo. –

+0

In C# Sembra che tu stia usando il ?? operatore dove altrimenti potresti usare il? operatore. Indipendentemente da ciò, se il tuo codice funziona e tu lo capisci, non vedo alcuna ragione per deviare. È esplicito e chiaro. Certo, potresti trasformarlo in un solo liner come pochi hanno dimostrato, ma il risultato è effettivamente lo stesso. –

+0

@WinstonEwert hai perfettamente ragione. Errore mio. Modificherò la mia domanda per renderla utile ad altre persone. –

risposta

10

Sì, è possibile scrivere:

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

Questo è chiamato un Conditional Expression in Python.

1

Sull'operatore a coalescenza nulla in C#, ciò che si ha nella domanda non è un uso corretto. Ciò fallirebbe al momento della compilazione.

In C#, il modo corretto di scrivere quello che stai tentando sarebbe questo:

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

fondono Null in C# restituisce il primo valore che non è nulla in una catena di valori (o null se non ci sono valori non nulli). Per esempio, quello che si scrive in C# per tornare il primo tratto non nullo oppure un tratto di default se tutti gli altri erano nulla è in realtà questo:

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

Giusto, stavo pensando il?: Operatore condizionale e ha scritto il ?? operatore a coalescenza nulla. Colpa mia. –