「Python系列」Python random模块、hashlib模块

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: `random` 模块在 Python 中提供了多种生成随机数的方法

一、Python random模块

random 模块在 Python 中提供了多种生成随机数的方法。以下是 random 模块中一些最常用的方法:

1. random.random()

生成一个 [0.0, 1.0) 范围内的随机浮点数。

import random
print(random.random())  # 输出例如 0.572348984589

2. random.uniform(a, b)

生成一个 [a, b) 范围内的随机浮点数。

import random
print(random.uniform(1.5, 4.2))  # 输出例如 2.3456789012

3. random.randint(a, b)

生成一个 [a, b] 范围内的随机整数。

import random
print(random.randint(1, 10))  # 输出例如 5

4. random.randrange(start, stop, step)

生成一个从 startstop(不包括 stop)范围内的随机整数,步长为 step

import random
print(random.randrange(1, 10, 2))  # 输出例如 1, 3, 5, 7, 9

5. random.choice(seq)

从非空序列 seq 中随机选择一个元素。

import random
my_list = ['apple', 'banana', 'cherry']
print(random.choice(my_list))  # 输出例如 'banana'

6. random.shuffle(seq)

将序列 seq 中的元素随机排序,原地修改 seq

import random
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)  # 输出例如 [2, 1, 5, 4, 3]

7. random.sample(seq, k)

从序列 seq 中随机选择 k 个不重复的元素,返回一个列表。

import random
my_list = [1, 2, 3, 4, 5]
print(random.sample(my_list, 3))  # 输出例如 [3, 1, 4]

8. random.bytes(n)

生成 n 个随机字节。

import random
print(random.bytes(10))  # 输出例如 b'\x12\x3e\x54\x76\x98\xba\xdc\xfe\x12\x34'

9. random.seed(a)

设置随机数生成器的种子值。如果两次调用 random.seed(a) 使用了相同的种子值 a,那么之后的随机数序列将会是相同的。

import random
random.seed(10)
print(random.random())  # 每次使用相同的种子都会得到相同的随机数

10. random.getrandbits(k)

生成一个 k 位长的随机整数。

import random
print(random.getrandbits(16))  # 输出例如 61703

11. random.triangular(low, high, mode)

import random

# 生成一个低为low、高为high、众数为mode的三角形分布的随机浮点数
print(random.triangular(1, 10, 5))

12. random.betavariate(alpha, beta)

import random

# 生成一个Beta分布的随机浮点数
print(random.betavariate(3, 3))

13. random.expovariate(lambd)

import random

# 生成一个指数分布的随机浮点数
print(random.expovariate(0.5))

14. random.normalvariate(mu, sigma)

import random

# 生成一个正态(高斯)分布的随机浮点数
print(random.normalvariate(0, 1))

二、Python hashlib模块

hashlib 是 Python 的标准库之一,用于提供常见的哈希算法,如 MD5、SHA1、SHA224、SHA256、SHA384、SHA512 以及 SHA3(Keccak)等。以下是一些 hashlib 模块中常用的函数和类,以及它们的案例代码:

hashlib 模块中的常用方法和类

  1. hashlib.md5()
  2. hashlib.sha1()
  3. hashlib.sha224()
  4. hashlib.sha256()
  5. hashlib.sha384()
  6. hashlib.sha512()
  7. hashlib.blake2b()
  8. hashlib.blake2s()
  9. hashlib.sha3_224()
  10. hashlib.sha3_256()
  11. hashlib.sha3_384()
  12. hashlib.sha3_512()
  13. hashlib.new(name, data=None)

案例代码

MD5 哈希

import hashlib

# 创建一个 MD5 哈希对象
md5_hash = hashlib.md5()

# 提供要哈希的数据,需要先转换为字节
data = "Hello, world!".encode('utf-8')

# 更新哈希对象
md5_hash.update(data)

# 获取16进制哈希值
hex_dig = md5_hash.hexdigest()

print(hex_dig)  # 输出 MD5 哈希值的16进制表示

SHA256 哈希

import hashlib

# 创建一个 SHA256 哈希对象
sha256_hash = hashlib.sha256()

# 提供要哈希的数据(同样需要是字节)
data = "This is a SHA256 hash example.".encode('utf-8')

# 更新哈希对象
sha256_hash.update(data)

# 获取16进制哈希值
hex_dig = sha256_hash.hexdigest()

print(hex_dig)  # 输出 SHA256 哈希值的16进制表示

使用 hashlib.new() 创建哈希对象

hashlib.new() 是一个更通用的方法,可以用来创建任何类型的哈希对象。

import hashlib

# 使用 new 方法创建一个 SHA1 哈希对象
sha1_hash = hashlib.new('sha1')

# 提供要哈希的数据(字节形式)
data = b"Hashing with hashlib.new()"

# 更新哈希对象
sha1_hash.update(data)

# 获取16进制哈希值
hex_dig = sha1_hash.hexdigest()

print(hex_dig)  # 输出 SHA1 哈希值的16进制表示

哈希文件内容

如果你想哈希一个文件的内容,你可以这样做:

import hashlib

def hash_file(file_path, hash_type='sha256'):
    """哈希文件内容"""
    sha_signature = hashlib.new(hash_type)

    with open(file_path, "rb") as f:
        while True:
            data = f.read(4096)
            if not data:
                break
            sha_signature.update(data)

    return sha_signature.hexdigest()

# 使用函数哈希文件
file_path = 'path/to/your/file.txt'
print(hash_file(file_path))  # 输出文件的哈希值

在以上示例中,hash_file 函数接受一个文件路径和一个哈希类型(默认为 SHA256),然后读取文件内容并计算其哈希值。这个函数在读取大文件时特别有用,因为它不会一次性将整个文件加载到内存中。

三、相关链接

  1. Python下载安装中心
  2. Python官网
  3. Python软件下载
  4. 「Python系列」Python简介及案例
  5. 「Python系列」Python基础语法/数据类型
  6. 「Python系列」Python解释器
  7. 「Python系列」Python运算符
  8. 「Python系列」Python数据结构
  9. 「Python系列」Python元组
  10. 「Python系列」Python集合
  11. 「Python系列」Python列表
相关文章
|
8天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
11天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
50 5
|
14天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
16 7
|
14天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
14 6
|
12天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
15 1
|
12天前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
30 1
|
13天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
12 1
|
13天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
13 1
|
15天前
|
知识图谱 Python
SciPy 教程 之 SciPy 模块列表 5
本教程介绍SciPy常量模块中的单位类型,涵盖公制、质量、时间、长度等单位。示例代码展示了如何使用`scipy.constants`模块获取不同质量单位的千克值,如公吨、磅、盎司、原子质量单位等。
12 1
|
9天前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
12 0