random.seed()函数理解
random模块使用Mersenne Twister算法来计算生成随机数。这是一个确定性算法,但是可以通过random.seed()函数修改初始化种子[1]。比如:
random.seed() # Seed based on system time or os.urandom() random.seed( 12345 ) # Seed based on integer given random.seed(b 'bytedata' ) # Seed based on byte data |
对于random.seed(n),如果使用相同的n值,则随机数生成函数每次生成的随机数序列都相同;如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数序列因时间差异而不同。
例1
import random random.seed( 9 ) for i in range ( 3 ): print (random.random()) |
运行结果如下:
0.46300735781502145 0.37331193139504204 0.13853941251445523 |
本例中,每次循环时random.random()都采用9作为初始化的种子,生成相同的随机数序列。在循环中,第一次调用random.random()将返回该随机数序列的第一个元素,第二次调用random.random()将返回该随机数序列的第二个元素,以此类推。
再次运行示例代码的结果如下:
0.46300735781502145 0.37331193139504204 0.13853941251445523 |
多次运行这个示例代码,所得结果都是一样的,因为在本例中,使用的seed()值都是9,所以random.random()每次生成的随机数序列都相同。
例2
import random for i in range ( 3 ): random.seed( 9 ) print (random.random()) |
运行上述程序的结果如下:
0.46300735781502145 0.46300735781502145 0.46300735781502145 |
在本例中,使用的seed()值都是9,所以random.random()每次生成的随机数序列都相同,但是random.seed(9)在循环内部,print(random.random())这行命令每一次输出时都定位到所生成的随机数列表的第一个元素。
参考资料:
[1]. 3.11 随机选择
[2]. random.seed()的使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通