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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: `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月前
|
Python
|
8月前
|
Python
|
9月前
|
算法 数据安全/隐私保护
python-- hashlib 模块
python-- hashlib 模块
|
9月前
python-- random 模块
python-- random 模块
|
11月前
|
算法 Python
Python random 模块的总结
Python random 模块的总结
184 0
|
存储 算法 安全
【Python基础篇019】hashlib模块初识
【Python基础篇019】hashlib模块初识
110 0
【Python基础篇019】hashlib模块初识
|
Python
Python - random 库的详细使用
Python - random 库的详细使用
134 0
|
存储 算法 API
每周一个 Python 模块 | hashlib
hashlib 模块定义了用于访问不同加密散列算法的 API。要使用特定的哈希算法,需要先用适当的构造函数或new()创建哈希对象。然后,无论使用何种算法,对象都使用相同的 API。
134 0
|
索引 Python
每周一个 Python 模块 | itertools
Python 标准库模块 itertools 提供了很多方便灵活的迭代器工具,熟练的运用可以极大的提高工作效率。
103 0