Cla*_*diu 4 python obfuscation coding-style idioms
我必须从一个可能为None的变量中提取值,并考虑到一些默认值.我先写了这段代码:
if self.maxTiles is None:
maxX, maxY = 2, 2
else:
maxX, maxY = self.maxTiles
Run Code Online (Sandbox Code Playgroud)
然后我意识到我可以缩短它:
maxX, maxY = self.maxTiles if self.maxTiles is not None else (2, 2)
Run Code Online (Sandbox Code Playgroud)
但后来我意识到这可能是最简洁易读的:
maxX, maxY = self.maxTiles or (2, 2)
Run Code Online (Sandbox Code Playgroud)
后者是可接受的,还是过于hackish?
特别是关于
self.maxTiles if self.maxTiles is not None else (2, 2)
Run Code Online (Sandbox Code Playgroud)
我发现一般形式的"双重否定" 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
Run Code Online (Sandbox Code Playgroud)
到更一般的问题:a = b or c是罚款当且仅当你真的想使用c的任何虚假值b-这是不是罚款与具体处理b是None.IOW,b or c是一种更好的表达方式
b if b else c
Run Code Online (Sandbox Code Playgroud)
但是,这并不是表达核心测试的类似表达的方式b is None.从理论上讲,如果你"知道"唯一可能的错误值b是None,它们在语义上是等价的,但是对于你的代码的读者/维护者来说,强大的"唯一可能的错误值"约束是不明显的 - 如果你有添加注释来解释这一点,任何or可能声称的简洁优势都是无效的...更好的,在可行的情况下,"在代码中说出来",而不是让代码模糊不清,需要注释来澄清它正在做什么以及什么时候做(注释是真正有用的是相当那些解释,而不是什么和何时[代码本身应该显示- )],而是为什么 当它不明显时 - 这个特定的代码功能的应用目的是什么?