Andrew Koenig wrote: > > Why can't you do this? > > foo =3D log.setdefault(r,'') > > foo +=3D "test %d\n" % t > You can do it, but it's useless! I got bitten by the same problem some time ago. Please let me explain: I needed to count words, using a dict, of course. So, in my first enthusiasm, I wrote: count =3D {} for word in wordlist: count.setdefault(word, 0) +=3D 1 This, as I soon realized, didn't work, exactly because ints are immutable= . So I tried a different track. No problem, I thought, in the new Python object world, the native classes can be subclassed. I imagined I could enhance the int class with an inc() method, thusly: class Counter(int): def inc(self): # to be defined self +=3D 1?? count =3D {} for word in wordlist: count.setdefault(word, Counter()).inc() As you can see, I have a problem at the comment: how do I access the inherited int value??? I realized that this also wasn't going to work, either. I finally used the perhaps idiomatic count =3D {} for word in wordlist: count[word] =3D count.get(word, 0) + 1 which of course is suboptimal, because the lookup is done twice. I decide= d not to implement a proper Counter class for memory efficiency reasons. Th= e code would have been simple: class Counter: def __init__(self): self.n =3D 0 def inc(self): self.n +=3D 1 def get(self): return self.n count =3D {} for word in wordlist: count.setdefault(word, Counter()).inc() But to restate the core question: can class Counter be written as a subcl= ass of int? Beat Bolli (please CC: me on replys, I'm not on the list) --=20 mail: `echo '<bNObolli@ymaSPilAM.ch>' | sed -e 's/[A-S]//g'` pgp: 0x506A903A; 49D5 794A EA77 F907 764F D89E 304B 93CF 506A 903A icbm: 47=B0 02' 43.0" N, 07=B0 16' 17.5" E (WGS84)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4