[Python-ideas] dir with a glob?

Steven D'Aprano steve at pearwood.info
Thu Jun 30 18:31:38 CEST 2011


Ben Finney wrote:
> Sturla Molden <sturla at molden.no> writes:
>>> dir(object, "foo*")
>> I ask again: what would you expect (give an example) the output of this
> to be?

That specific example should return an empty list, since object has no 
attributes that match the glob foo*
>> What I am asking is if the need to filter the output from dir is so
>> common that it could warrant a change to Python?
>> Given that we already have ways to filter a sequence built into the
> language, I doubt the need for a special way to filter the output from
> some particular function.

There is precedence though.
Many string methods have special way to limit their output to some 
subset of results, rather than relying on a generic, built-in way to do 
the same thing:
mystr.find("spam", 23, 42) vs mystr[23:42].find("spam")
dir itself already duplicates functionality available elsewhere:
 >>> dir() == sorted(globals())
True
dir with an argument is a little trickier, but it's not far off a one-liner:
dir(d) == sorted(
 set(sum((o.__dict__.keys() for o in ((d,)+type(d).__mro__)), []))
 )
(at least for new-style objects with no __slots__).
dir is a convenience function, designed for interactive use. The docs 
make it explicit:
[quote]
Because dir() is supplied primarily as a convenience for use at an 
interactive prompt, it tries to supply an interesting set of names more 
than it tries to supply a rigorously or consistently defined set of names...
http://docs.python.org/library/functions.html#dir
Given that, I see no downside to making dir more convenient for 
interactive use. That's what it's for.
-- 
Steven


More information about the Python-ideas mailing list

AltStyle によって変換されたページ (->オリジナル) /