[Python-Dev] Proposal: defaultdict

Ian Bicking ianb at colorstudy.com
Sat Feb 18 00:21:52 CET 2006


Martin v. Löwis wrote:
>>I know *I* at least don't like code that mixes up access and 
>>modification.  Maybe not everyone does (or maybe not everyone thinks of 
>>getitem as "access", but that's unlikely).  I will assert that it is 
>>Pythonic to keep access and modification separate, which is why methods 
>>and attributes are different things, and why assignment is not an 
>>expression, and why functions with side effects typically return None, 
>>or have names that are very explicit about the side effect, with names 
>>containing command verbs like "update" or "set".  All of these 
>>distinguish access from modification.
> 
> 
> Do you never write
> 
>  d[some_key].append(some_value)
> 
> This is modification and access, all in a single statement, and all
> without assignment operator.

(d[some_key]) is access.  (...).append(some_value) is modification. 
Expressions are compound; of course you can mix both access and 
modification in a single expression.  d[some_key] is access that returns 
something, and .append(some_value) modifies that something, it doesn't 
modify d.

> I don't see the setting of the default value as a modification.
> The default value has been there, all the time. It only is incarnated
> lazily.

It is lazily incarnated for multidict, because there is no *noticeable* 
side effect -- if there is any internal side effects that is an 
implementation detail.  However for default_factory=list, the result of 
.keys(), .has_key(), and .items() changes when you do d[some_key].

-- 
Ian Bicking  /  ianb at colorstudy.com  /  http://blog.ianbicking.org


More information about the Python-Dev mailing list