亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 4450 | 回復(fù): 14
打印 上一主題 下一主題

非多線程環(huán)境下,如何鎖住dict [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-08-17 12:29 |只看該作者 |倒序?yàn)g覽
我想求教,在非多線程的環(huán)境下,如果我想鎖住一個dict,比如不讓增加新Key,或者不讓改value。那我應(yīng)該如何做到呢?

論壇徽章:
2
CU大;照
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
2 [報(bào)告]
發(fā)表于 2012-08-17 13:15 |只看該作者
看看 UserDict

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2012-08-17 14:30 |只看該作者
回復(fù) 2# cdtits

你的意思是不是這樣:
  1. from UserDict import UserDict

  2. class myUserDict(UserDict):
  3.         def __init__(self,dict=None,lock=False,**kwarg):
  4.                 self.lock = lock
  5.                 UserDict.__init__(self,dict,**kwarg)
  6.         def lockit(self):
  7.                 self.lock = True
  8.         def unlockit(self):
  9.                 self.lock =False
  10.         def __setitem__(self,key,item):
  11.                 if self.lock:
  12.                         raise ValueError("The Dict is locked")
  13.                 else:
  14.                         return UserDict.__setitem__(self,key,item)
  15.         def __delitem__(self,key):
  16.                 if self.lock:
  17.                         raise ValueError("The Dict is locked")
  18.                 else:
  19.                         return UserDict.__delitem__(self,key)
  20.         def update(self,dict=None,**kwarg):
  21.                 if self.lock:
  22.                         raise ValueError("The Dict is locked")
  23.                 else:
  24.                         return UserDict.update(self,dict,**kwarg)
  25.         def setdefault(self,key,failobj=None):
  26.                 if self.lock:
  27.                         raise ValueError("The Dict is locked")
  28.                 else:
  29.                         return UserDict.setdefault(self,key,failobj)
  30.         def pop(self,key,*args):
  31.                 if self.lock:
  32.                         raise ValueError("The Dict is locked")
  33.                 else:
  34.                         return UserDict.pop(self,key,*args)
  35.         def popitem(self):
  36.                 if self.lock:
  37.                         raise ValueError("The Dict is locked")
  38.                 else:
  39.                         return UserDict.popitem(self)


復(fù)制代碼
結(jié)果:
>>> from myUserDict import myUserDict
>>> a=myUserDict({1:1,2:2,3:3})
>>> a
{1: 1, 2: 2, 3: 3}
>>> a[4]=4
>>> a
{1: 1, 2: 2, 3: 3, 4: 4}
>>> a.lockit()
>>> a[5]=5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "myUserDict.py", line 13, in __setitem__
    raise ValueError("The Dict is locked")
ValueError: The Dict is locked
>>>   

論壇徽章:
2
CU大;照
日期:2013-04-17 11:46:28CU大;照
日期:2013-04-17 11:46:39
4 [報(bào)告]
發(fā)表于 2012-08-17 14:56 |只看該作者
嗯,就是實(shí)現(xiàn)一個 warpper ...

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2012-08-17 15:11 |只看該作者
回復(fù) 4# cdtits


有更好的寫法嗎?總覺得有些臃腫。   

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2012-08-17 15:18 |只看該作者
回復(fù) 2# cdtits


    謝謝。在Perl Cookbook里,發(fā)現(xiàn)Hash::Util可以鎖住Key和value以及整個hash。貌似原生的dict沒有這個方法。所以就來問下。你Python不錯啊

論壇徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
7 [報(bào)告]
發(fā)表于 2012-08-17 15:20 |只看該作者
回復(fù) 6# zhuyubei


    我 python 和 perl 都一般般

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2012-08-17 15:20 |只看該作者
回復(fù) 3# Hadron74


    這位朋友謝謝你的認(rèn)真回復(fù)。按照你的實(shí)現(xiàn),我覺得似乎可以不用UserDict也可以對原生的dict進(jìn)行這樣的繼承。你覺得呢

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2012-08-17 15:25 |只看該作者
回復(fù) 8# zhuyubei

你說的是對的。不過還有更好的寫法嗎?感覺有些代碼冗余在里面。
   

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2012-08-17 15:28 |只看該作者
回復(fù) 9# Hadron74


    包裝類就是這么寫得吧。要么用組合的方式使用dict作為其屬性。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP