Python random.choice 实现之数据模型魔术方法

起因自《流畅的python》1.1 一摞Python风格的纸牌

自实现类要支持 random.choice 方法只需要支持两个魔术方法即可。

1
2
__len__
__getitem__

例如

1
2
3
4
5
6
7
8
9
10
11
class MyClass:
def __len__(self):
return 8
def __getitem__(self, key):
return 4

mc = MyClass()
print(len(mc)) # 8
print(mc[15]) # 4
from random import choice
print(choice(mc)) # 4

进入python内置库 random 中查看choice 的实现,可以看到实现正是使用了序列的 __len__ 方法和 __getitem__ 方法。

1
2
def choice(seq):
return seq[random.random() * len(seq)]
Author: SmallXeon
Link: https://hexo.chensmallx.top/2022/03/08/python-random-choice-implement/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
一些推广链接
几个便宜量大的小✈场: FASTLINK, YToo, 论坛邀请注册: ,
便宜量大但是稳定性不足的VPS: Virmach, 价格略贵但好用的VPN: , ,