You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何正确设置可选seed参数避免哈希播种弃用警告

问题原因
  • 你使用*seed定义可变位置参数时,无论是否传值,seed变量最终都是元组类型:不传值时为空元组(),传值时为所有传入参数打包成的元组。
  • random.seed()不支持元组作为合法入参,空元组的哈希值被用作种子的写法从Python 3.9开始废弃,因此触发警告。
  • 普通可选参数不需要用*定义,直接设置默认值即可。
正确实现方案

基础修改(最小改动)

直接将seed参数设为默认值为None的可选参数即可,random.seed()原生支持None作为入参,此时会默认使用系统时间生成种子,和不设置种子的效果一致:

import random

def random_num(n, number, seed=None): #n是待返回的数值数量,number是后续使用的均匀分布的取值范围
    collect = []
    random.seed(seed)
    for i in range(n):
        collect.append(round(random.uniform(-number, number),2))    
    return collect

调用方式和你之前的用法完全兼容:

  • 不传入seed:random_num(4,5)
  • 传入固定seed:random_num(4,5, 123) 或 random_num(4,5, seed=123)

优化方案(避免影响全局随机状态)

上面的写法会修改random模块的全局随机数种子,可能影响其他调用random模块的代码的运行结果。更规范的写法是创建独立的随机数实例,完全隔离状态:

import random

def random_num(n, number, seed=None): #n是待返回的数值数量,number是后续使用的均匀分布的取值范围
    collect = []
    # 创建独立随机数实例,和全局random状态互不影响
    rng = random.Random(seed)
    for i in range(n):
        collect.append(round(rng.uniform(-number, number),2))    
    return collect

内容的提问来源于stack exchange,提问作者saZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:45:07