gpt4 book ai didi

python - x 或 y : acceptable idiom, 还是混淆?

转载 作者:太空狗 更新时间:2023-10-30 01:42:26 26 4
gpt4 key购买 nike

我必须从一个可能为 None 的变量中提取值,并考虑一些默认值。我首先写了这段代码:

if self.maxTiles is None:
maxX, maxY = 2, 2
else:
maxX, maxY = self.maxTiles

然后我意识到我可以将它缩短为:

maxX, maxY = self.maxTiles if self.maxTiles is not None else (2, 2)

但后来我意识到这可能是最简洁易读的:

maxX, maxY = self.maxTiles or (2, 2)

后者是否可以接受,还是太老套了?

最佳答案

关于,特别是,

self.maxTiles if self.maxTiles is not None else (2, 2)

我发现一般形式的“双重否定”if not A: B else: C(无论是作为语句还是表达式)可能会非常困惑/误导;这不是字面上的 if not .. else,但是移动 not 不会使“双重否定”消失。

因此,一般来说,我只是将此类结构重写为 if A: C else: B。在这种特殊情况下,如果我确实选择了三元运算符形式,我会将其编码为

(2, 2) if self.maxTiles is None else self.maxTiles

关于更一般的问题:a = b or c 很好当且仅当你真的想使用 c <b 的 em>任何 错误值 -- not 不能专门处理 bNone。 IOW,b 或 c 是更好的表达方式

b if b else c

但它不是一种表达类似表达式的方式,其中核心测试是 b is None。理论上,如果您“知道”b 的唯一可能假值是 None,那么它们在语义上是等价的,但是“唯一可能的假值”约束将对于您的代码的读者/维护者来说并不明显——如果您必须添加注释来解释这一点,那么 可能声称的任何简洁优势都将无效……如果可行,更好的是“在代码中说出来”,而不是让代码晦涩难懂,需要注释来明确说明它在做什么和什么时候(真正有用的注释是那些解释,而不是什么和什么时候[[代码本身应该表明!-)]],而是为什么当它不明显时——这个特定的代码功能花絮所服务的应用程序目的是什么)。

关于python - x 或 y : acceptable idiom, 还是混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3604726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com