使用公共api在python中提供几个随机性源
randomness的Python项目详细描述
python的随机源
当前功能
- 随机源的统一api
- 系统真正随机性生成器的API访问
- 可供选择的随机性提供者列表
- 可筛选的提供商标志
计划功能
- 随机性质量综合测试(Diehard,ent,…)
- 更多prngs(wichmann hill,xorshift,…)
- 更多trng(通过挂锁rng、外部硬件等)
- 更好的API来筛选和排序提供程序
- 在浪费和保留使用随机位之间进行选择, 后者最有可能是Mixin
- 为所有随机源提供numpy api的适配器, 最有可能通过Mixin
用法
你可以直接实例化一个随机源,如果你知道它在那里的话。 (或者,如果您处理的异常不是这样的话):
fromrandomnessimportURandomtry:fromrandomnessimportRandomexceptImportError:passrandom=URandom()
或者您可以仔细阅读提供者列表并从中选择一个 (可能先过滤列表):
fromrandomnessimportPROVIDERS,ProviderFlag# filter randomness providersmy_providers=[providerforproviderinPROVIDERSifprovider.flags&ProviderFlag.NEVER_BLOCKING]# dump provider namesforproviderinmy_providers:print(provider.name)# instantiate a randomness contextchosen_provider=my_providers[0]random=chosen_provider.cls()
从这一点上讲,向前的用法与您所做的相同
from random import Random; random = Random()
。
# perform a die rolldie_result=random.randint(1,6)print(die_result)# select a random cheeseCHEESE_SHOP_PRODUCTS=["Tilsit","Cheddar","Roquefort","Gouda"]cheese=random.choice(CHEESE_SHOP_PRODUCTS)print(cheese)# draw lottery numbersamount_of_numbers=49amount_to_draw=6series=random.sample(range(1,amount_of_numbers+1),amount_to_draw)print(series)