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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么 datetime.utcnow 的行為不像我對(duì) freezegun 的預(yù)期那樣?

為什么 datetime.utcnow 的行為不像我對(duì) freezegun 的預(yù)期那樣?

LEATH 2022-06-28 15:28:37
我注意到一些我不明白的東西,我想知道是否有人可以闡明它。簡(jiǎn)而言之:如果x = datetime.datetime.utcnow和y = lambda: datetime.datetime.utcnow()我希望x()并且y()總是表現(xiàn)得一樣。然而,當(dāng) freezegun 參與時(shí)顯然不是這種情況 - 它凍結(jié)y但沒有x,我想知道為什么。(無論如何,如果x并且y在 freezegun 上下文之外定義,這是真的;在這樣的上下文中,它們的行為似乎相同。)例子:from datetime import datetimeimport freezegun# I'd expect these two to behave the same, always.x = datetime.utcnowy = lambda: datetime.utcnow()with freezegun.freeze_time('2019-01-02 03:04:05'):    # Here their behaviours diverge    print('Time from x:', x())    print('Time from y:', y())    # This behaves as I'd expect, however.    z = datetime.utcnow    print('Time from z:', z())))結(jié)果:Time from x: 2019-10-18 12:21:37.508590Time from y: 2019-01-02 03:04:05Time from z: 2019-01-02 03:04:05這Time from x是運(yùn)行時(shí)的時(shí)間,即它不受 freezegun 的控制。任何人都可以對(duì)此有所了解嗎?這只是 freezegun 的一些奇怪之處,或者當(dāng)我假設(shè)x并且y應(yīng)該始終等價(jià)時(shí),我是否誤解了關(guān)于 python 的更基本的東西?我看到這utcnow是一個(gè)綁定的類方法,但我不明白為什么這會(huì)暗示這種行為。后記:time.time不這樣做查看utcnow()'s source它基本上只是一個(gè)包裝器-time.time()但不要以這種方式發(fā)散...所以我猜這確實(shí)與綁定類方法有關(guān)-但我不知道是什么。time.timelambda: time.time() utcnow()import timeimport freezegunr = time.times = lambda: time.time()print('Time outside freezegun:', time.time())with freezegun.freeze_time('2019-01-02 03:04:05'):    print('Time from r:', r())    print('Time from s:', s())給出:Time outside freezegun: 1571401765.2612312Time from r: 1546398245.0Time from s: 1546398245.0游戲中的版本$ python --versionPython 3.7.3$ pip list | grep freezegunfreezegun               0.3.12
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

所以我猜這確實(shí)與 utcnow() 是一個(gè)綁定類方法有關(guān)——但我不知道是什么。


看起來你的直覺是正確的。Freezegun 不會(huì)修補(bǔ)datetime類的單個(gè)方法 - 相反,它會(huì)用自己的類完全替換FakeDatetime該類。


通過做作業(yè):


x = datetime.utcnow

x 存儲(chǔ)對(duì)原始utcnow()方法的引用,即使在freezegun.freeze_time()上下文管理器中也保持不變。


另一方面,lambda: datetime.utcnow()調(diào)用當(dāng)前上下文中可用的類utcnow(),并由.datetimeFakeDatetimefreezegun.freeze_time()


time.time()由freezegunfake_time()修補(bǔ)。Freezegun 甚至搜索已加載的模塊并修補(bǔ)存儲(chǔ)對(duì) 的引用的變量time.time(),但它僅限于模塊變量,因此它不會(huì)檢查內(nèi)部列表:


import time

import freezegun


r = [time.time]


with freezegun.freeze_time('2019-01-02 03:04:05'):

    print('Time inside freezegun:', time.time())

    time_inside_list = r[0]

    print('Time from list:', time_inside_list())

輸出:


Time inside freezegun: 1546398245.0

Time from list: 1571669871.8807676

獎(jiǎng)勵(lì):如果 freezegun 如此細(xì)致地查找time.time()存儲(chǔ)在模塊變量中的引用,為什么它不修補(bǔ)time.time()內(nèi)部使用的datetime.utcnow()?


在搜索sys.modules它時(shí)故意省略 datetime和模塊不覆蓋源函數(shù),并且作為在模塊中導(dǎo)入time的副作用保持不修補(bǔ)。time.timedatetime


查看完整回答
反對(duì) 回復(fù) 2022-06-28
  • 1 回答
  • 0 關(guān)注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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