C#和#x27的Python版本;s条件算子(?)

C#和#x27的Python版本;s条件算子(?),python,conditional-operator,Python,Conditional Operator,我看到了,但它使用了??运算符作为空检查,我想将其用作布尔真/假测试 我用Python编写了以下代码: if self.trait == self.spouse.trait: trait = self.trait else: trait = defualtTrait 在C#中,我可以这样写: trait = this.trait == this.spouse.trait ? this.trait : defualtTrait; 在Python中有类似的方法吗?是的,您可以编写

我看到了,但它使用了??运算符作为空检查,我想将其用作布尔真/假测试

我用Python编写了以下代码:

if self.trait == self.spouse.trait:
    trait = self.trait
else:
    trait = defualtTrait
在C#中,我可以这样写:

trait = this.trait == this.spouse.trait ? this.trait : defualtTrait;
在Python中有类似的方法吗?

是的,您可以编写:

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

这在Python中称为a。

关于C#中的空合并运算符,您在问题中遇到的用法不正确。这将在编译时失败

在C#中,正确的书写方式是:

trait = this.trait == this.spouse.trait ? self.trait : defaultTrait
C#中的Null coalesce返回值链中第一个非Null的值(如果没有非Null值,则返回Null)。例如,在C#中编写的返回第一个非空特征或默认特征(如果所有其他特征都为空)实际上是这样的:

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

在C#中,你只需要?接线员来做。在C中,看起来你在使用??操作员,您可以在哪里使用?操作人员不管怎样,如果你的代码有效,并且你理解它,我看不出有任何理由偏离。这是明确的,清晰的。当然,你可以像一些人演示的那样把它变成一行,但结果实际上是一样的。@WinstonEwert你说得很对。我的错误。我将编辑我的问题以使其对其他人有所帮助。对,我正在考虑?:条件运算符并写出??空合并运算符。我的错。