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

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

保存對象(數據持久性)

保存對象(數據持久性)

藍山帝景 2019-06-18 10:40:45
保存對象(數據持久性)我創(chuàng)建了這樣一個對象:company1.name = 'banana' company1.value = 40我想保存這個對象。我怎么能這么做?
查看完整描述

3 回答

?
米琪卡哇伊

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

我認為假設對象是class..如果不是class?還有一個假設,即在解釋器中沒有定義對象。如果它是在解釋器中定義的呢?另外,如果屬性是動態(tài)添加的呢?當某些python對象將屬性添加到它們的__dict__在創(chuàng)造之后,pickle不尊重這些屬性的添加(也就是說,它“忘記”它們是添加的-因為pickle通過引用對象定義進行序列化)。

在所有這些情況下,picklecPickle會讓你失望的。

如果您希望保存object(任意創(chuàng)建),其中有屬性(或者添加在對象定義中,或者隨后添加)…你最好的選擇是dill,它可以序列化python中的幾乎任何東西。

我們從…類開始

Python 2.7.8 (default, Jul 13 2014, 02:29:54) [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwinType
 "help", "copyright", "credits" or "license" for more information.>>> import pickle>>> class Company:...    
  pass... >>> company1 = Company()>>> company1.name = 'banana'>>> company1.value = 40>>> with open('company.pkl', 'wb') as f:...  
     pickle.dump(company1, f, pickle.HIGHEST_PROTOCOL)... >>>

現在關閉,重新啟動.。

Python 2.7.8 (default, Jul 13 2014, 02:29:54) [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwinType "help",
 "copyright", "credits" or "license" for more information.>>> import pickle>>> with open('company.pkl', 'rb') as f:...    
  company1 = pickle.load(f)... Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1378, in load    
  return Unpickler(file).load()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1090, in load_global
    klass = self.find_class(module, name)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1126, in find_class
    klass = getattr(mod, name)AttributeError: 'module' object has no attribute 'Company'>>>

OOPS…pickle處理不了。我們試試看dill..我們將添加另一個對象類型(lambda)為了好的措施。

Python 2.7.8 (default, Jul 13 2014, 02:29:54) [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwinType "help",
 "copyright", "credits" or "license" for more information.>>> import dill       
>>> class Company:...     pass... >>> company1 = Company()>>> company1.name = 'banana'>>> company1.value = 40>>> >>> company2 = 
lambda x:x>>> company2.name = 'rhubarb'>>> company2.value = 42>>> >>> with open('company_dill.pkl', 'wb') as f:...    
 dill.dump(company1, f)...     dill.dump(company2, f)... >>>

現在看文件。

Python 2.7.8 (default, Jul 13 2014, 02:29:54) [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwinType "help",
 "copyright", "credits" or "license" for more information.>>> import dill>>> with open('company_dill.pkl', 'rb') as f:...    
  company1 = dill.load(f)...     company2 = dill.load(f)... >>> company1 
<__main__.Company instance at 0x107909128>>>> company1.name'banana'>>> company1.value40>>> company2.name'rhubarb'>>> company2.value42>>>

它起作用了。原因pickle失敗,而且dill不是,是嗎?dill款待__main__類似于一個模塊(在大多數情況下),并且還可以通過引用對類定義進行分類,而不是對類進行分類(如pickle)。原因dill腌制lambda是它給它起了一個名字…然后腌制魔法就會發(fā)生。

實際上,有一種更簡單的方法來保存所有這些對象,特別是如果您已經創(chuàng)建了很多對象。只需轉儲整個python會話,稍后再返回。

Python 2.7.8 (default, Jul 13 2014, 02:29:54) [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwinType "help", 
"copyright", "credits" or "license" for more information.>>> import dill>>> class Company:...    
 pass... >>> company1 = Company()>>> company1.name = 'banana'>>> company1.value = 40>>> >>> company2 = lambda x:x>>> company2.name = 
 'rhubarb'>>> company2.value = 42>>> >>> dill.dump_session('dill.pkl')>>>

關掉你的電腦,喝杯濃咖啡什么的,等會兒再來.

Python 2.7.8 (default, Jul 13 2014, 02:29:54) [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwinType "help", 
"copyright", "credits" or "license" for more information.>>> import dill>>> dill.load_session('dill.pkl')>>> company1.name'banana'>>> 
company1.value40>>> company2.name'rhubarb'>>> company2.value42>>> company2<function <lambda> at 0x1065f2938>

唯一的主要缺點是dill不是python標準庫的一部分。因此,如果您無法在服務器上安裝python包,那么就不能使用它。

但是,如果您能夠在系統(tǒng)上安裝python包,則可以獲得最新的dill帶著git+https://github.com/uqfoundation/dill.git@master#egg=dill..您可以通過以下方式獲得最新發(fā)布的版本pip install dill.


查看完整回答
反對 回復 2019-06-18
  • 3 回答
  • 0 關注
  • 658 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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