piglei / one-python-craftsman

来自一位 Pythonista 的编程经验分享,内容涵盖编码技巧、最佳实践与思维模式等方面。

Home Page:https://www.piglei.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

勘误

fraaannn opened this issue · comments

https://github.com/piglei/one-python-craftsman/blob/master/zh_CN/2-if-else-block-secrets.md

`上面的代码里,判断 UserCollection 是否有内容时用到了 users._users 的长度。其实,通过为 UserCollection 添加 len 魔法方法,上面的分支可以变得更简单:

class UserCollection:

def __init__(self, users):
    self._users = users

def __len__(self):
    return len(self._users)

users = UserCollection([piglei, raymond])

定义了 len 方法后,UserCollection 对象本身就可以被用于布尔判断了

if users:
print("There's some users in collection!")
`

应该是 if len(users):

你好,这里不是错误。这里想要说明的点就是,在定义了 __len__ 方法之后,Python 就会以这个长度函数返回值是否为 0 来判断布尔真假。

如果用列表来举例:

In [1]: empty_list = []

# 我们一般不在列表上再调用一次 len 来判断它是“真还是假”
In [2]: bool(len(empty_list))
Out[2]: False

# 直接在列表上调用 bool 更常见
In [3]: bool(empty_list)
Out[3]: False