我不确定这是一个自以为是的问题,还是我误解了“隐式”和“显式”在 Python 上下文中的真正含义。
a = []
# my understanding is that this is implicit
if not a:
print("list is empty")
# my understanding is that this is explicit
if len(a) == 0:
print("list is empty")
Run Code Online (Sandbox Code Playgroud)
我正在尝试遵循 Python 规则的禅宗,但我很想知道这是否适用于这种情况,还是我想多了?感谢我能得到的任何指导。
这两个语句具有非常不同的语义。请记住,Python 是动态类型的。
对于 的情况a = [],not a和len(a) == 0是等价的。一个有效的替代方法可能是检查not len(a). 在某些情况下,您甚至可能希望通过执行a == [].
但a可以是任何东西。例如,a = None。支票没问题not a,会回来的True。但len(a) == 0根本不会好。相反,您将获得TypeError: object of type 'NoneType' has no len(). 这是一个完全有效的选项,但这些if语句做的事情非常不同,你必须选择你想要的。
(几乎)所有东西__bool__在 Python 中都有一个方法,但不是所有东西都有__len__. 您必须根据情况决定使用哪一种。需要考虑的事情是:
a是一个序列?if语句在非序列上崩溃吗?请记住,使代码看起来漂亮是正确完成工作的第二位。