python - Python 2.7.3 哈希字符串如何用于为随机数生成器提供种子?

标签 python python-2.7 random

在 64 位 Python 2.7.6 中这是 True,但在 32 位 Python 2.7.3 中它是 False:

random.Random(hash("a")).random() == random.Random("a").random()

那么 Python 2.7.3 哈希字符串如何用于为随机数生成器提供种子?

最佳答案

这是因为在 32 位上 hash("a") 是一个负数(因为平台长类型大小)并且随机模块的行为不同。

随机模块 seed() 函数:

  • 传递 int 或 long 它将使用 PyNumber_Absolute()abs()
  • 传递一个对象(一个字符串)它将使用 PyLong_FromUnsignedLong((unsigned long)hash)

符号位截断和abs给出不同的结果

例如:

  • abs(-10) = 10
  • ((unsigned long) -10) = 4294967286

关于python - Python 2.7.3 哈希字符串如何用于为随机数生成器提供种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23260975/

相关文章:

python - 调整图像大小时,面部和眼睛检测结果不明确

python - Centos 上带有 sqlite3 模块的 python 2.7.3 的问题

python - CSV文件和python中的控制字符

python - 将参与者随机重新分配到组中,以便最初来自同一组的参与者最终不会出现在同一组中

java - 如何防止在随机 int 中生成值? ( java )

python 和 sqlite - 转义输入

python - 在 flask 中不返回任何内容,但我不明白为什么

python - 在 Windows 7 上安装 JDK 和 Python 并设置 PATH 变量

python-2.7 - 如何覆盖 Flask-Admin 的 edit_form() 将以前的值保留为占位符

java - 在Java中,如何创建n个具有某些属性的字符串