如果Python没有三元条件运算符,是否可以使用其他语言结构模拟一个?
在C#中有一个null-coalescing运算符(写为??),允许在赋值期间进行简单(短)空检查:
string s = null;
var other = s ?? "some default value";
Run Code Online (Sandbox Code Playgroud)
是否有python等价物?
我知道我能做到:
s = None
other = s if s else "some default value"
Run Code Online (Sandbox Code Playgroud)
但是有更短的方式(我不需要重复s)?
我刚刚才知道有Truthy和Falsy在Python这是与正常不同的价值观True和False?
是否有人可以深入解释什么truthy和falsy值?
我应该在哪里使用它们?
truthy和True值以及falsy和False值之间有什么区别?
有没有办法只在分配的值不是 None 时才进行分配,否则什么都不做?
我们当然可以这样做:
x = get_value() if get_value() is not None
Run Code Online (Sandbox Code Playgroud)
但这将读取该值两次。我们可以将它缓存到一个局部变量中:
v = get_value()
x = v if v is not None
Run Code Online (Sandbox Code Playgroud)
但现在我们为一件简单的事情做了两个陈述。
我们可以写一个函数:
def return_if_not_none(v, default):
if v is not None:
return v
else:
return default
Run Code Online (Sandbox Code Playgroud)
然后做x = return_if_not_none(get_value(), x)。但是肯定已经有一个 Python 习惯用法可以实现这一点,无需访问x或get_value()两次,也无需创建变量?
换句话说,假设=??是一个类似于C# null 合并运算符的 Python 运算符。与 C# 不同??=,我们虚构的运算符检查右侧是否为None:
x = 1
y = 2
z = None
x =?? y …Run Code Online (Sandbox Code Playgroud) Python中是否有一个空传播运算符(“空感知成员访问”运算符),所以我可以写一些类似的东西
var = object?.children?.grandchildren?.property
Run Code Online (Sandbox Code Playgroud)
就像在 C#、VB.NET 和 TypeScript 中一样,而不是
var = None if not myobject\
or not myobject.children\
or not myobject.children.grandchildren\
else myobject.children.grandchildren.property
Run Code Online (Sandbox Code Playgroud) python null-coalescing-operator null-coalescing method-chaining