亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

存儲(持久化)單個(數字)變量值的最優雅方式

存儲(持久化)單個(數字)變量值的最優雅方式

侃侃無極 2022-12-14 20:43:20
我需要在腳本執行之間存儲一個計數器的值,這樣我就可以每隔一百次觸發一個特定的子例程。我知道我可以將我的整數寫入一個文本文件并重新讀取它,我知道我可以 pickle 我的變量達到幾乎相同的效果(腳本當前使用后一種方法)。我所關心的是找到使代碼盡可能優雅(簡單且易于理解)的方法,尤其是對于非技術受眾。模塊名稱在這pickle方面沒有幫助——一旦你理解了這個比喻,它就完全令人難忘,但如果你不知道它,則需要注釋(或口頭解釋)來解釋它是一個用于序列化 Python 對象的模塊到磁盤。雖然“很高興”,但我并不特別關心存儲操作的原子性,也不關心強烈保護存儲的值不丟失 [盡管我確實需要它在服務器重啟后保持不變]。我感興趣的是訪問和更新變量值的代碼的優雅,而不是初始化存儲值的代碼的優雅(因此,如果要將值存儲在文件中,我對代碼感興趣讀取和寫入已經存在并保存值的文件,而不是在第一次執行時創建文件)。存儲單個(數字)值以使其在腳本執行之間持續存在的最優雅(和/或最pythonic)的方法是什么?
查看完整描述

3 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

標準庫的shelve模塊正是為這個用例設計的:對象持久化。在這里你可以簡單地做:

with shelve.open('counter') as db:
    db['value'] = counter

它將自動創建該文件并將計數器的值存儲在其中。


查看完整回答
反對 回復 2022-12-14
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

這是一種“寫入文本文件”的方法:


with open('counter', 'r') as f:

    value = int(f.read())

# Perform increments to the counter 'value' here

with open('counter', 'w') as f:

    f.write(str(value))

這里的優雅損失是需要將變量從 a 轉換為 a str,但很明顯您正在寫入和讀取磁盤上的文件。


查看完整回答
反對 回復 2022-12-14
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

我的問題中提到的 pickle 方法是:


import pickle

with open('counter', 'rb') as f:

    value = pickle.load(f)    

# Perform increments to the counter 'value' here

with open('counter', 'wb') as f:

    pickle.dump(value, f)

這里失去的優雅是需要知道 pickle 模塊的作用。


查看完整回答
反對 回復 2022-12-14
  • 3 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號