有没有与C#等价的Python?。那么??接线员?

有没有与C#等价的Python?。那么??接线员?,python,ironpython,Python,Ironpython,例如,在C#(从v6开始)中,我可以说: mass = (vehicle?.Mass / 10) ?? 150; 如果有车辆,将质量设置为车辆质量的十分之一,但如果车辆为空(或如果质量属性为可空类型,则具有空质量),则将质量设置为150 在Python(特别是IronPython)中是否有一个等价的构造,我可以在我的C#app脚本中使用 这对于显示可由其他值修改的值的默认值特别有用-例如,我可能在脚本中为我的星际飞船定义了一个装甲组件,该组件总是占用飞船上安装的可用空间的10%,其其他属性也会

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

mass = (vehicle?.Mass / 10) ?? 150;
如果有车辆,将质量设置为车辆质量的十分之一,但如果车辆为空(或如果质量属性为可空类型,则具有空质量),则将质量设置为150

在Python(特别是IronPython)中是否有一个等价的构造,我可以在我的C#app脚本中使用

这对于显示可由其他值修改的值的默认值特别有用-例如,我可能在脚本中为我的星际飞船定义了一个装甲组件,该组件总是占用飞船上安装的可用空间的10%,其其他属性也会缩放,但是我想显示装甲的尺寸、生命值、成本等的默认值,以便您可以将其与其他舰船组件进行比较。否则,我可能必须编写一个进行一两次空检查的复杂表达式,就像我在v6之前的C#中所做的那样。

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

有人提议()添加这样的操作符,但对于是否应该将这些操作符添加到语言中以及如果应该,它们将采取什么形式,还没有达成共识

从实施部分:

鉴于对无意识运营商的需求存在疑问,且上述运营商的拼写几乎具有煽动性,CPython的实施细节将被推迟,除非且直到我们更清楚地知道一家(或多家)拟议运营商将获得批准

请注意,Python实际上没有
null
的概念。Python名称和属性总是引用某些东西,它们从来都不是
null
引用
None
只是Python中的另一个对象,社区不愿意让这个对象如此特殊,以至于需要自己的操作符

在实现此功能之前(如果有,IronPython将赶上该Python版本),您可以使用Python实现同样的功能:

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

你将使用三元运算符来代替这些运算符。要记住的一件重要的事情是,你不应该试图使一种语言符合你从另一种语言获得的意识形态。Python有自己的方式来做这样的事情。我建议查看一行
if/else
语句。@PM2Ring:C#code也没有。另请参阅,其中讨论了在Python 3.6中添加此类运算符(由于3.6已进入beta版,现在不太可能),这在处理方法而不是属性时更有用,因为它有助于编写非常简洁流畅的代码,如果没有None测试,代码将变得冗长和重复。我希望PEP505将来能有更多的时间。是的,我在想这样的事情;我只是希望有一种更简洁的方式!我想知道关于操作符的“拼写”有什么争议?埃科利斯:最有争议的部分是是否将
None
提升到一个有专门操作符的水平。然后有一些解析和优先的问题来考虑这些操作符会在哪里与其他语言发生冲突。我想我可以编写一个类似于Excel中的“IF”函数的函数,但是我想我不能把它写为IFNO(车辆,车辆,质量,150)。因为车辆质量必须首先评估,这将导致车辆被取消参考,即使它没有,对吗?我想我可以传入一个lambda,但这几乎和你建议的if语句一样复杂…@ekolis:yup,参数表达式在调用
ifnone()
函数之前执行,因为Python会传入每个表达式的结果。您可以将第二个操作数设为属性名(字符串),并在函数中使用
getattr(firstargument,secondargument)
来解决这个问题?