[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