duck typing at will

J

Jose Mora

Duck typing is called that way because "If it looks like a duck and
quacks like a duck, it must be a duck." I think it would be good to
have also "If the programmer wants to deal with it like a duck, it
must be a duck"

I mean, some tasks are rather boring in python when compared with php,
for example, let's imagine we have a dictionary that contains
dictionaries that contain the times that a key appears. We, or at
least I, would like to write something as short as:

dict[k1][k2] += 1

However we will have to do a longer code (this is the smallest code I
could come up with):

dict = {}
if not k1 in dict:
dict[k1] = {}
if not k2 in dict[k1]:
dict[k1][k2] = 0
dict[k1][k2] += 1

I know it is not the Apocalypse nor something really important when
compared with other things, but maybe it would be better if it wasn't
necessary to declare the variables when they are built-in types or to
initialize the keys in a dictionary, having special values (the
identity element of the operation that causes the initialization) to
initialize when it has not been done, initializing with the most
general type that supports the operation that causes the
initialization, casting to other type if necessary after that.

This is just an idea, maybe I'm not the first one suggesting it, or
maybe it is completely impossible to implement it because it would
require deep changes in python, but I wanted to discuss it.

Best regards.
 
B

Bruno Desthuilliers

Jose Mora a écrit :
Duck typing is called that way because "If it looks like a duck and
quacks like a duck, it must be a duck."

or at least something close enough...
I think it would be good to
have also "If the programmer wants to deal with it like a duck, it
must be a duck"

DWIM[1] just doesn't work. No parser can read your mind, and the harder
they try, the more bugs they are likely to cause. IOW : cows neither
look nor quack like ducks, and asking a cow to quack just won't turn
your cow into a duck.


[1] Do What I Mean
I mean, some tasks are rather boring in python when compared with php,

Possibly. OTHO, and from years of experience with both languages, a lot
of tasks are way more boring in php when compared to Python.
for example, let's imagine we have a dictionary that contains
dictionaries that contain the times that a key appears. We, or at
least I, would like to write something as short as:

dict[k1][k2] += 1
>
However we will have to do a longer code (this is the smallest code I
could come up with):
dict = {}

bad identifier - it shadows the builtin dict type.
if not k1 in dict:
dict[k1] = {}
if not k2 in dict[k1]:
dict[k1][k2] = 0
dict[k1][k2] += 1

What about:

from collections import defaultdict
d = defaultdict(lambda: defaultdict(int))

for k1, k2 in whatever:
d[k1][k2] += 1



NB : this requires a "recent" Python version (works on 2.5.1 at least).
Else, yes, this will be a bit more "boring":

d = dict()
for k1, k2 in whatever:
d2 = d.setdefault(k1, dict())
d2[k2] = d2.get(k2, 0) + 1


HTH
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,981
Messages
2,570,188
Members
46,733
Latest member
LonaMonzon

Latest Threads

Top