Luis Gonzalez wrote:
Yes, I know the python approach is to use built-ins.
But wouldn't it be cool if we could do mydict.values().tolist()
instead?

Should we also give every collection a .toset(), .tofrozenset(), .totuple(), and .todict() method? This way lies the madness of combinatorial explosion.

It would be more regular and intuitive and readable from an OO point
of view.

In my opinion, this is backwards. From an OO point of view, instances of class X should be created by the constructor for that class. That is where the knowledge of the intermal structure of class X instances belongs. The principle of information hiding dictates that other classes should not know how to create an X. On the other hand, collection classes should be iterable and know how to de-structure themselves. So list(iterable) operates by iterable providing an iterator that list uses to create an instance. The stream of object provided by the iterator is the common means of transferring information.

In my oppinion, this would be cleaner.

To me, the hypothetical

import operator
map(operator.attrgetter('tolist'), [[1,2,3], (1,2,3), {1,2,3},{1:'a',2:'b',3:'c'}])

is a lot dirtier than the current

map(list, [[1,2,3], (1,2,3), {1,2,3},{1:'a',2:'b',3:'c'}])

Built-ins used like this look like an early decission made when
designing an imperative language.

It is part of python basic design. Functions used as functions can be passed as arguments to functions and used to operator on heterogeneous collections, as in the example above.

Terry Jan Reedy


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to