
On Fri, 4 Sep 2009 08:03:21 pm Nick Coghlan wrote:
Stefan Behnel wrote:
It would therefore be nice to have a common ".any()" method on data structures that would just read an arbitrary item from a container.
I'd advise against bare name "any" for this, since we already have the any() builtin with a completely different meaning. "getany" would probably be OK though.
I'd also advise against using a method for this, since there is a reasonable default implementation that can be employed:
def getany(container) if container: if isinstance(container, collections.Sequence): return container[0] else: for x in container: return x raise ValueError("No items in container")
Finally, I'd suggest that any such function would belong in the collections module rather than being made a builtin.
Given the above implementation, repeated calls to getany(sequence) will return the same item each time. Is that what people will expect by a function that claims to return "any" element of a collection? I suspect that users will be evenly divided into those who say Yes, those who say No, and those who say "It depends on what I'm trying to do". Should it return an arbitrary item, or a random item? Is "the first item" arbitrary enough? It should be for dicts, which are unordered, but may not be for lists. I think the answers to these questions are too application-specific for any solution or solutions to go into the standard library. It probably belongs in the cookbook as a handful of related recipes. -- Steven D'Aprano