是否有一个Python等效的C#null-coalescing运算符?

问题:

在C#中有一个null-coalescing operator(写为??),允许在分配期间进行简单的(短)空检查:

string s = null;
var other = s ?? "some default value";

有没有python的等价物?
我知道我可以做:

s = None
other = s if s else "some default value"

但是,是否有更短的方式(我不需要重复s)?

回答:

other = s or "some default value"

好的,必须澄清or操作符的工作原理。它是一个布尔运算符,因此它在布尔上下文中工作。如果值不是布尔值,则为了运算符的目的,将它们转换为布尔值。
请注意,or运算符不仅返回TrueFalse。相反,如果第一个操作数的计算结果为true,则返回第一个操作数,如果第一个操作数的值为false,则返回第二个操作数。
在这种情况下,如果x or y表达式x or y返回x,或者当转换为布尔值时返回true。否则返回y。在大多数情况下,这将适用于C♯的零合并运算符的相同目的,但请记住:

42    or "something"    # returns 42
0     or "something"    # returns "something"
None  or "something"    # returns "something"
False or "something"    # returns "something"
""    or "something"    # returns "something"

如果您使用变量s来容纳某个对类的实例或None的引用(只要您的类不定义成员__nonzero__()__len__()),则使用它是安全的与null-coalescing运算符相同的语义。
事实上,Python的这种副作用甚至可能是有用的。由于您知道什么值评估为false,因此您可以使用它来触发默认值,而不使用None具体(例如,错误对象)。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Is there a Python equivalent of the C# null-coalescing operator?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

8 + 1 =