当前位置: 首页 > 面试题库 >

是否有Python等效于C#null-coalescing运算符?

左丘曦
2023-03-14
问题内容

在C#中,有一个null-coalescing运算符(写为??),允许在赋值期间进行简单(简短)的null检查:

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,则返回第二个操作数。

在这种情况下,如果表达式为true ,则x or y返回x它,True或者当转换为boolean时,表达式为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(只要您的类未定义member__nonzero__()__len__()),则使用与null-
coalescing运算符相同的语义是安全的。

实际上,拥有Python的这种副作用甚至可能是有用的。由于您知道哪些值的计算结果为false,因此可以使用它来触发默认值,而无需None专门使用(例如,错误对象)。

在某些语言中,此行为称为Elvis运算符。



 类似资料:
  • 问题内容: 我将举例说明: 猫王算子(?:) “ Elvis运算符”是Java三元运算符的缩写。一个方便的例子是,如果表达式解析为false或null,则返回“明智的默认值”。一个简单的示例可能如下所示: 安全导航操作员(?。) 安全导航运算符用于避免NullPointerException。通常,当您拥有对对象的引用时,可能需要在访问对象的方法或属性之前验证其是否为null。为了避免这种情况,安

  • 问题内容: 是否可以在Java中执行类似于以下代码的操作 问题答案: 可悲的是没有。您能做的最接近的是: 当然,如果您有需要的话,可以将其包装在库方法中(不太可能减少长度),但是在语法级别上没有更简洁的方法了。

  • 问题内容: 有人可以解释一下SQL中的以下行为吗? 问题答案: 是标准SQL-92;是等效的。两者都评估值,但不是-是占位符,表示不存在值。 这就是为什么您只能在此类情况下使用/作为谓词的原因。 此行为不特定于SQL Server。所有符合标准的SQL方言都以相同的方式工作。 注意 :要比较如果您的 值不为null ,请使用,而要与 不为null 值进行比较,请使用。我不能说我的值是否等于NULL

  • 问题内容: 我知道我们可以使用Java中的方法通过指定其位置来获取字符串中的单个字符。C#中有等效的方法吗? 问题答案: 您可以像数组一样索引C#中的字符串,然后在该索引处获取字符。 例: 在Java中,您会说 在C#中,您会说

  • 问题内容: 在JavaScript中: C#应用程序是否等效?为了转义HTML字符,我使用了: 但是我不确定如何将匹配项转换为JS使用的正确十六进制格式。例如此代码: 返回“ 的,而不是它看起来像我需要了分割字符串为字节或东西。 编辑:这是一个Windows应用程序中,唯一可用的项目有:,,和。 问题答案: 或者是转义旨在成为URL一部分的字符串的正确方法。 以字符串为例: -> -> ->也编码

  • 本文向大家介绍C#是否等效于Java的Thread.setDaemon?,包括了C#是否等效于Java的Thread.setDaemon?的使用技巧和注意事项,需要的朋友参考一下 与Java的Thread.setDaemon等效的C#是前台线程和后台线程的概念。 当前台线程关闭时,后台线程将终止。前台线程继续运行,直到最后一个前台线程终止。 用于后台线程的属性是IsBackground,该属性获取