一、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)
生成一个从 start
到 stop
(不包括 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 模块中的常用方法和类
hashlib.md5()
hashlib.sha1()
hashlib.sha224()
hashlib.sha256()
hashlib.sha384()
hashlib.sha512()
hashlib.blake2b()
hashlib.blake2s()
hashlib.sha3_224()
hashlib.sha3_256()
hashlib.sha3_384()
hashlib.sha3_512()
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),然后读取文件内容并计算其哈希值。这个函数在读取大文件时特别有用,因为它不会一次性将整个文件加载到内存中。