Python-версия условного оператора C # (?) - PullRequest
6 голосов
/ 07 октября 2011

Я видел этот вопрос но он использует ??оператор как нулевая проверка, я хочу использовать его как bool true / false тест.

У меня есть этот код на Python:

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

В C # я мог бы написать это как:

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

Есть ли подобный способ сделать это в Python?

Ответы [ 2 ]

11 голосов
/ 07 октября 2011

Да, вы можете написать:

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

Это называется Условное выражение в Python.

1 голос
/ 08 октября 2011

В операторе C # с нулевым слиянием то, что у вас есть в вопросе, не является правильным использованием.Это может привести к сбою во время компиляции.

В C # правильный способ написать то, что вы пытаетесь, будет выглядеть так:

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

Null coalesce в C # возвращает первое значение, которое не 't null в цепочке значений (или null, если нет ненулевых значений).Например, то, что вы написали бы в C #, чтобы вернуть первую ненулевую черту или черту по умолчанию, если все остальные были нулевыми, на самом деле это:

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