是否有Python等同于C#?和??运营商?

时间:2016-09-16 15:16:19

标签: python ironpython

例如,在C#中(从v6开始)我可以说:

mass = (vehicle?.Mass / 10) ?? 150;

如果有车辆,则将质量设置为车辆质量的十分之一,但如果车辆为空,则为150(或者如果Mass属性为可空类型,则为零质量)。

我可以在C#应用程序的脚本中使用Python(特别是IronPython)中的等效构造吗?

这对于显示可以被其他值修改的值的默认值特别有用 - 例如,我可能在我的星舰的脚本中定义了一个盔甲组件,它总是占用船上可用空间的10%。安装在,它的其他属性也可以缩放,但是我想显示装甲的大小,生命值,成本等的默认值,这样你就可以将它与其他船舶组件进行比较。否则,我可能不得不写一个复杂的表达式,进行一次或两次空检查,就像在V6之前我必须在C#中一样。

1 个答案:

答案 0 :(得分:12)

不,Python(还)还没有NULL合并运算符。

有一个提案PEP 505 – None-aware operators)来添加这些运算符,但是没有共识存在或者根本不应该将这些添加到语言中,如果是这样,这些将是什么形式取。

来自 Implementation 部分:

  

鉴于对无意识运营商的需求是值得怀疑的,并且所述运营商的拼写几乎是煽动性的,CPython的实施细节将被推迟,除非我们更清楚地了解一个(或多个)拟议的运算符将被批准。

请注意,Python并非拥有 null的概念。 Python名称和属性总是引用某些东西,它们永远不是null引用。 None只是Python中的另一个对象,社区不愿意让一个对象如此特殊以至于需要自己的运算符。

直到这个时间实现(如果有的话,并且IronPython赶上了那个Python版本),你可以使用Python的conditional expression来实现同样的目标:

mass = 150 if vehicle is None or vehicle.Mass is None else vehicle.Mass / 10