self.maxTiles if self.maxTiles is not None else (2, 2)
我发现一般形式if not A: B else: C(无论是作为语句还是表达式)的“双否定”可能会非常混乱/误导;这不是字面上的if not .. else,但是移动{}并不会使“双否定”消失。在
所以,一般来说,我只是将这些结构重写为if A: C else: B。在这个特殊的例子中,如果我选择了三元运算符形式,我会将它编码为
^{pr2}$
关于更一般的问题:a = b or c是好的当且仅当您真的想将c用于b的任何错误值时,a = b or c是None的具体处理是好的。低,b or c是一种更好的表达方式
b if b else c
但这不是一种表达类似表达式的方法,核心测试是b is None。理论上,如果您“知道”b的唯一可能的假值是None,那么它们在语义上是等价的,但是对于代码的读者/维护者来说,强大的“只有可能的假值”约束是不明显的——如果您必须添加注释来解释这一点,or可能声称的任何简洁的优点都无效。。。如果可行的话,最好是“用代码说出来”,而不是让代码变得晦涩难懂,需要注释来明确它在做什么和什么时候(真正有用的注释应该是那些解释什么的注释,而不是解释什么和什么时候的注释[[代码本身应该显示这一点!-)]],而是在不明显的情况下,为什么这个特定的代码功能为应用程序提供了什么用途)。在
具体来说
我发现一般形式}并不会使“双否定”消失。在
if not A: B else: C
(无论是作为语句还是表达式)的“双否定”可能会非常混乱/误导;这不是字面上的if not .. else
,但是移动{所以,一般来说,我只是将这些结构重写为
^{pr2}$if A: C else: B
。在这个特殊的例子中,如果我选择了三元运算符形式,我会将它编码为关于更一般的问题:
a = b or c
是好的当且仅当您真的想将c
用于b
的任何错误值时,a = b or c
是None
的具体处理是好的。低,b or c
是一种更好的表达方式但这不是一种表达类似表达式的方法,核心测试是
b is None
。理论上,如果您“知道”b
的唯一可能的假值是None
,那么它们在语义上是等价的,但是对于代码的读者/维护者来说,强大的“只有可能的假值”约束是不明显的——如果您必须添加注释来解释这一点,or
可能声称的任何简洁的优点都无效。。。如果可行的话,最好是“用代码说出来”,而不是让代码变得晦涩难懂,需要注释来明确它在做什么和什么时候(真正有用的注释应该是那些解释什么的注释,而不是解释什么和什么时候的注释[[代码本身应该显示这一点!-)]],而是在不明显的情况下,为什么这个特定的代码功能为应用程序提供了什么用途)。在如果您在beginning of a function处执行此操作,我将使用较长的形式,因为它更具惯用性,并且可以立即识别。是的,这是更多的行,但你几乎没有保存任何字符,短行可以容纳79个字符行=好。在
另外,如果你需要调整逻辑或者增加更多的步骤,你很可能会恢复到长格式。在
除了gddc(假设maxTiles是一个元组的问题)的答案之外,我可能会选择第二个选项,但为了清楚起见,请添加括号:
相关问题 更多 >
编程相关推荐