• python随机数(转载)


    随机生成 0 到 1 之间的浮点数

    random.random() 方法会返回 [0.0, 1.0) 之间的浮点数,注意,这是一个左闭右开的区间,随机数可能会是 0 但不可能为 1 。

    随机生成 a 与 b 之间的整数

    使用 random.randint(a , b) 方法,你可以生成一个 a 与 b 之间的随机整数,也就是 [a, b] 。

    当然,如果你想要生成的随机整数不会包含 b ,也即 [a, b) , 你可以使用 random.randrange() 方法。

    生成 a 与 b 之间的浮点数

    如果你需要生成 [a, b] 之间的随机浮点数,那么 random.uniform(a, b) 会满足你的需求。

    从列表中随机取出一个元素

    如果你想从序列类型中随机取出一个元素,比如列表、元祖、字符串等,random.choice() 是一个不错的选择。

    需要注意的是,该方法需要参数非空,不然会抛出 IndexError 的错误。

    打乱列表中元素的顺序

    使用 random.shuffle(items) 方法可以帮你把序列 items 中的元素随机打乱。

    如果你不想修改原来的列表,你可以使用 copy 模块先拷贝一份原来的列表

    从列表中随机取出 n 个元素

    使用 random.sample(items, n) 方法可以从序列 items 中随机取出 n 个元素。

    生成密码学安全的伪随机数

    什么是密码学安全的伪随机数,请看维基百科( http://dwz.cn/7JhRN5 )。不过暂时不需要深入的话,理解为比普通随机数更随机的技术就好。

    如果你需要生成密码学安全的随机数,你可以通过 random.SystemRandom 类实现。random.SystemRandom 实例化后的对象拥有与 random 类似的方法。

     

    如果 Python 版本在 3.6 及以上,可以使用 secrets 模块

    通过 secrets 模块,同样也能生成密码学安全的随机数。并且,利用它生成一些特定的秘钥特别方便。

    下面是一些简单的例子

     

    通过这个模块比较字符串相等,还可以减少被时序攻击的风险。

    什么是时序攻击呢,我这找了一个通俗的解释

    举一个最简单的计时攻击的例子,某个函数负责比较用户输入的密码和存放在系统内密码是否相同,如果该函数是从第一位开始比较,发现不同就立即返回,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。密码破解复杂度成千上万倍甚至百万千万倍的下降。

    (文字来源知乎,侵删)

    关于secrets 模块的更多介绍,请看官方文档( https://docs.python.org/3/library/secrets.html )

    转载自:http://baijiahao.baidu.com/s?id=1596465591200328534&wfr=spider&for=pc

  • 相关阅读:
    Scrapy(爬虫)基本运行机制
    Python面向对象中的“私有化”
    基于Requests和BeautifulSoup实现“自动登录”
    BeautifulSoup模块
    Python爬虫之-Requests
    踩坑之jinja2注释问题(Flask中)
    Struts2 从一个Action跳至另一个Action
    @JSON(serialize=false),过滤不需要的变量
    JS function的参数问题
    nginx反向代理配置及优化
  • 原文地址:https://www.cnblogs.com/foreverlin/p/10718034.html
Copyright © 2020-2023  润新知