Python的Zen“显式优于隐式”

2024-04-24 05:03:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定这是一个自以为是的问题,还是我误解了“隐式”和“显式”在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")

我试图遵循Python的禅宗法则,但我很好奇这是否适用于这种情况,或者我是否考虑过度了?谢谢你给我的指导


Tags: lenifthatismynotthislist
2条回答

试着想想:

if not a:
    ...

以下简称:

if len(a) == 0:
    ...

我不认为这是一个很好的例子,说明Python的禅宗规则“显式”优于“隐式”。这主要是因为可读性。这并不是说第二个是坏的,另一个是好的。只是第一个比较熟练。如果你理解Python中列表的布尔性质,我想你会发现第一个在Python中更具可读性和可读性

这两个语句具有非常不同的语义。请记住,Python是动态类型的

对于a = []的情况,not alen(a) == 0都是等价的。一个有效的替代方法可能是检查not len(a)。在某些情况下,您甚至可能希望通过执行a == []来检查空性和无精打采性

但是a可以是任何东西。例如,a = None。检查not a没有问题,将返回True。但是len(a) == 0一点也不好。相反,您将得到TypeError: object of type 'NoneType' has no len()。这是一个完全有效的选项,但是if语句做的事情非常不同,您必须选择您想要的

(几乎)在Python中,所有东西都有__bool__方法,但不是所有东西都有__len__。你必须根据情况决定使用哪一种。需要考虑的是:

  • 您是否已经验证了a是否为序列
  • 你需要吗
  • 你介意你的if语句在非序列上崩溃吗
  • 是否要将其他falsy对象当作空列表来处理

记住,让代码看起来漂亮是正确完成工作的第二位

相关问题 更多 >