PySequence_Check
Tim Peters
Tim.Peters at p98.f112.n480.z2.fidonet.org
Tue Jun 29 14:57:04 EDT 1999
From: "Tim Peters" <tim_one at email.msn.com>
[Reuben Sumner]
> How can I do the equivalent of a PySequence_Check in Python?
> GvR told me that the question was illdefined (if I explained it correctly)
> and to ask here. It seems that some of the functions in abstract.h
> are available from python (len(), callable()) and others are not
> (PySequence_Check, PyNumber_Check).
>
> What am I missing?
For starters, unquestioning faith in Guido's pronouncements <wink>.
> I have a nested structure of lists and tuple and I just want to know
> when I have bottomed out.
Then why not check for that directly and be done with it?
> I can check for tuple or list indivually but that is ugly and
> inflexible.
Not to mention simple, obvious and unsurprising <wink>.
> I could just try indexing and see if there was an exception but that
> is not much better.
OK, you tell me: what *is* a sequence? Answer that, and you'll know how to
check for it <0.5 wink>. Before answering too fast, note that mapping types
can be indexed without raising an exception, and so can strings. Do you
want your nest of "lists and tuples" *not* to "bottom out" at a string?
Probably not -- but if so, you're not really interested in testing whether
it's a sequence! Note too that user-defined classes can support the
__getitem__ protocol without supporting the __getslice__ protocol, or vice
versa. Are either of those sequences, or do they need to support both?
Whichever way you answer, half the world will disagree.
I think that, in most cases, when people say "sequence": (A) it's
ill-defined <wink>; and, (B) after five rounds of tedious questioning they
end up deciding they mean "responds to slicing but isn't a string". So
there you go:
def issequence(x):
try:
x[0:0]
except:
return 0
return type(x) is not type("")
may-not-match-what-you-mean-by-"sequence"-ly y'rs - tim
More information about the Python-list
mailing list