python seed函数

看了某鸟上的教程,发现seed函数可以接受2个参数
但是使用时只有第一个参数有用,而第二个参数看起来像个摆设,请问为何要加入第二个参数
img

For version 2 (the default), all of the bits are used if *a* is a str,
 bytes, or bytearray.  For version 1 (provided for reproducing random
 sequences from older versions of Python), the algorithm for str and
  bytes generates a narrower range of seeds.

翻译如下:
对于版本2(默认值),如果a是str,则使用所有位,
字节,或者bytearray。版本1(用于随机复制
str和的算法字节生成更窄的种子范围。

也就是第二个参数值version, 不传时默认是2版本,
底层代码:


    def seed(self, a=None, version=2):
        """Initialize internal state from hashable object.

        None or no argument seeds from current time or from an operating
        system specific randomness source if available.

        If *a* is an int, all bits are used.

        For version 2 (the default), all of the bits are used if *a* is a str,
        bytes, or bytearray.  For version 1 (provided for reproducing random
        sequences from older versions of Python), the algorithm for str and
        bytes generates a narrower range of seeds.

        """

        if version == 1 and isinstance(a, (str, bytes)):
            a = a.decode('latin-1') if isinstance(a, bytes) else a
            x = ord(a[0]) << 7 if a else 0
            for c in map(ord, a):
                x = ((1000003 * x) ^ c) & 0xFFFFFFFFFFFFFFFF
            x ^= len(a)
            a = -2 if x == -1 else x

        if version == 2 and isinstance(a, (str, bytes, bytearray)):
            if isinstance(a, str):
                a = a.encode()
            a += _sha512(a).digest()
            a = int.from_bytes(a, 'big')

        super().seed(a)
        self.gauss_next = None

也就是说不传时, a 也就是第一参数为是使用 字节或 bytearray类型,
传入 1时, 用于随机str 的算法字节生成更窄的种子范围。
从示例中可以看出:

import random

random.seed('100')
print(random.random())
random.seed('100',1)
print(random.random())

# 结果
0.35677737212581095
0.5211604367458436