use*_*203 3 python random python-2.7
从手册:
random.seed([X])
初始化基本随机数生成器.可选参数x可以是任何可哈希的对象.如果省略x或None,则使用当前系统时间; 当前系统时间也用于在首次导入模块时初始化生成器.如果操作系统提供随机源,则使用它们而不是系统时间(有关可用性的详细信息,请参阅os.urandom()函数).
如果给出可清洗对象,则仅在禁用PYTHONHASHSEED时确保确定性结果.
user@MacBook:~$ python
Python 2.7.11 (default, Aug 6 2016, 02:11:50)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> r = random.Random('somelongstring' * 40)
>>> r.randint(1, 1000)
332
>>> exit()
user@MacBook-Pro:~$ python
Python 2.7.11 (default, Aug 6 2016, 02:11:50)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> r = random.Random('somelongstring' * 40)
>>> r.randint(1, 1000)
332
>>>
Run Code Online (Sandbox Code Playgroud)
问题是,我每次都试图得到相同的结果,但根据手册和PYTHONHASHSEED,我每次都没有得到相同的结果.我在mac os,linux,python2.7和pypy上尝试了这个,他们一遍又一遍地保持相同的结果.
该默认值用于PYTHONHASHSEED被禁止的; 除非您明确启用它,否则Python 2中没有随机散列.它故意在Python 2中保持可选,以避免破坏依赖于散列在Python进程中稳定的应用程序,它只是Python 3的默认设置.
如果您要启用它(使用-R命令行开关或使用环境变量),那么您确实会看到一个区别:
$ python2.7 -R -c "import random; random.seed('somelongstring' * 40); print random.randint(1, 1000)"
955
$ python2.7 -R -c "import random; random.seed('somelongstring' * 40); print random.randint(1, 1000)"
277
Run Code Online (Sandbox Code Playgroud)
从-R交换机文档:
更改哈希值会影响从dict检索键的顺序.尽管Python从未对这种排序做出保证(并且它通常在32位和64位构建之间有所不同),但是足够的现实代码隐含地依赖于这种非保证行为,默认情况下禁用随机化.
Python 3中也发生了变化如何str,bytes并且bytearray被使用的对象; 他们通知种子而不使用他们的哈希.
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |