第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python 中的隨機(jī)函數(shù)預(yù)測

Python 中的隨機(jī)函數(shù)預(yù)測

HUH函數(shù) 2023-12-12 15:41:16
根據(jù)Random庫的文檔,假設(shè)開發(fā)人員沒有提供任何種子(None),該函數(shù)使用系統(tǒng)當(dāng)前時間作為種子(time.time())。不幸的是,輸出似乎沒有反映文檔print(random.randrange(1,10)) a=time.time() . . . . random.seed(a)print(random.randrange(1,10))上面的代碼產(chǎn)生 2 個不同的輸出,因此假設(shè)我使用 Windows 10(對于那些可能會考慮 urandom 供應(yīng)商方向的人)和 Python 3,我的問題是:1.為什么上面的代碼沒有產(chǎn)生相同的輸出2.如何讓它產(chǎn)生相同的輸出3.當(dāng)我試圖在 Random.py 中找到種子分配部分時,我找不到任何 time.time() 分配給 Random.seed 的地方,所以如果有人可以參考該部分,我將不勝感激
查看完整描述

1 回答

?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個贊

這實(shí)際上是一個有趣的問題。


首先,您可能會通過連續(xù)調(diào)用獲得相同的結(jié)果time.time(),但主要是由于精度。


In [36]: a=time.time(); b=time.time()


In [37]: b-a

Out[37]: 0.0

現(xiàn)在讓我們進(jìn)入問題:


由于初始種子的生成方式不同,它不會產(chǎn)生相同的輸出。如果您查看random.py源代碼,seed()您會看到它指定

def seed(self, a=None, version=2):

   """Initialize internal state from a seed.

   The only supported seed types are None, int, float,

   str, bytes, and bytearray.

   None or no argument seeds from current time or from an operating

   system specific randomness source if available.

因?yàn)闆]有參考,所以time.time()你不能假設(shè)它使用它。事實(shí)上,您可以查看CPython實(shí)現(xiàn)的源代碼(如果您了解 C)。如果需要的話,它有助于保證隨機(jī)種子的方法之一是:


static void

random_seed_time_pid(RandomObject *self)

{

    _PyTime_t now;

    uint32_t key[5];


    now = _PyTime_GetSystemClock();

    key[0] = (uint32_t)(now & 0xffffffffU);

    key[1] = (uint32_t)(now >> 32);


    key[2] = (uint32_t)getpid();


    now = _PyTime_GetMonotonicClock();

    key[3] = (uint32_t)(now & 0xffffffffU);

    key[4] = (uint32_t)(now >> 32);


    init_by_array(self, key, Py_ARRAY_LENGTH(key));

}

對不同時鐘和進(jìn)程 ID 進(jìn)行多次調(diào)用。沒有關(guān)于time.time(). 由于種子是如何生成的,兩個連續(xù)的種子幾乎不可能相同。


如果您希望某些東西產(chǎn)生相同的輸出,則需要以相同的方式播種。

In [42]: import random


In [43]: a = time.time()


In [44]: random.seed(a)


In [45]: random.randrange(100)

Out[45]: 98


In [46]: random.randrange(100)

Out[46]: 94


In [47]: random.seed(a)  # Reset


In [48]: random.randrange(100)

Out[48]: 98

不過,它不一定是數(shù)字。您可以使用許多不同的選項(xiàng)來播種。


希望上面提供的源代碼可以解決這個問題。


查看完整回答
反對 回復(fù) 2023-12-12
  • 1 回答
  • 0 關(guān)注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號