Python字典取值:.get(x, x)与.get(x) or x是否等价?
字典
get()两种写法的等价性与优劣分析 结论(基于给定前提:字典中无假值)
这两种写法完全等价:当brand_name是字典的键时,返回对应重命名后的品牌;当键不存在时,返回原brand_name。
技术差异(当字典可能包含假值时)
如果字典中存在假值(如空字符串""、0、False、None等),两种写法会产生不同结果:
rebrands.get(brand_name, brand_name):只要键存在,无论对应值是否为假值,都会返回该值。rebrands.get(brand_name) or brand_name:若键存在但对应值是假值,or的短路求值逻辑会触发,最终返回brand_name而非字典中的假值。
示例对比:
rebrands = {"EmptyBrand": ""} print(rebrands.get("EmptyBrand", "EmptyBrand")) # 输出:"" print(rebrands.get("EmptyBrand") or "EmptyBrand") # 输出:"EmptyBrand"
两种写法的优劣对比
rebrands.get(brand_name, brand_name)
- 优势1:语义明确:完全贴合字典
get()方法的设计初衷——"获取键对应值,不存在则使用默认值",所有Python开发者都能快速理解逻辑,通用性更强。 - 优势2:逻辑严谨:不依赖"无假值"的前提,后续维护时即便字典加入假值,代码也不会出现意外行为。
- 劣势:写法上重复了
brand_name变量。
rebrands.get(brand_name) or brand_name
- 优势:写法简洁,少一次变量重复,对习惯短路求值逻辑的开发者来说,阅读体验更流畅。
- 劣势1:依赖前提:必须保证字典中无假值,一旦前提被打破,会出现不符合预期的结果。
- 劣势2:语义间接:需要理解
or的短路求值规则,对新手开发者不够友好。
另外补充你提到的误区:字典的get()方法确实不支持default关键字参数,它的第二个位置参数就是默认值,因此rebrands.get(brand_name, default=brand_name)这种写法会抛出语法错误,属于无效写法。
内容的提问来源于stack exchange,提问作者Jack Deeth
相关产品推荐
相关产品推荐

