How can I verify that a passed argument is an interible collection?
List: I'm working on some methods that operate on (mathematical) vectors as in: def Convolution(x, y) Returns a list containing the convolution of vectors x and y Is there any way to determine at runtime that x and y are iterible collections? Do I *coughs* simply *coughs* trap the exception created by: for v in x: when v is a scaler quantity? Thanks Charles -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I verify that a passed argument is an interible collection?
Charles Krug wrote: I'm working on some methods that operate on (mathematical) vectors as in: def Convolution(x, y) Returns a list containing the convolution of vectors x and y Is there any way to determine at runtime that x and y are iterible collections? Do I *coughs* simply *coughs* trap the exception created by: for v in x: when v is a scaler quantity? why not leave trapping exceptions to whoever uses your function? /F -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I verify that a passed argument is an interible collection?
Others may know better ways but the 2 I know of are: 1) If you know that the arguments will be lists or tuples you can use isinstance(). if not isinsance(arg, (list, tuple): print arg must be list or tuple) 2) Or if you not you could see if the argument has next and __iter__ methods (more general solution) if hasattr(arg, 'next') and not hasattr(arg, '__iter__'): # perform work on iterable else: print arg must be an iterable Larry Bates Charles Krug wrote: List: I'm working on some methods that operate on (mathematical) vectors as in: def Convolution(x, y) Returns a list containing the convolution of vectors x and y Is there any way to determine at runtime that x and y are iterible collections? Do I *coughs* simply *coughs* trap the exception created by: for v in x: when v is a scaler quantity? Thanks Charles -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I verify that a passed argument is an interible collection?
Charles Krug [EMAIL PROTECTED] wrote: Do I *coughs* simply *coughs* trap the exception created by: for v in x: when v is a scaler quantity? Sure. Why not? If you're coming from a type-bondage language like C++ or Java, it probabliy feels strange, but it's the Python way. It looks like what you want to catch is TypeError. -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I verify that a passed argument is an interible collection?
Charles Krug wrote: List: I'm working on some methods that operate on (mathematical) vectors as in: def Convolution(x, y) Returns a list containing the convolution of vectors x and y Is there any way to determine at runtime that x and y are iterible collections? Do I *coughs* simply *coughs* trap the exception created by: for v in x: when v is a scaler quantity? Yes, thats considered good practice. -- Regards, Diez B. Roggisch -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I verify that a passed argument is an interible collection?
Charles Krug wrote: List: I'm working on some methods that operate on (mathematical) vectors as in: def Convolution(x, y) Returns a list containing the convolution of vectors x and y Is there any way to determine at runtime that x and y are iterible collections? Do I *coughs* simply *coughs* trap the exception created by: for v in x: when v is a scaler quantity? Sure, or if you want to do it earlier, you could try something like: def convolution(x, y): xiter = iter(x) yiter = iter(y) And then use xiter and yiter in your for loops. This will make sure that the TypeErrors get raised as soon as the function is called. STeVe -- http://mail.python.org/mailman/listinfo/python-list
Re: How can I verify that a passed argument is an interible collection?
On Thu, 21 Apr 2005 09:59:54 -0500, Larry Bates [EMAIL PROTECTED] wrote: 2) Or if you not you could see if the argument has next and __iter__ methods (more general solution) if hasattr(arg, 'next') and not hasattr(arg, '__iter__'): # perform work on iterable else: print arg must be an iterable alist = ['Think', 'before', 'posting!'] hasattr(alist, 'next') False === Fails the first leg of your test for iterability. for wd in alist: ... print wd ... Think before posting! === Looks iterable to me!! In any case, trying to define isiterable(x) in terms of x having or not having particularly-named attributes doesn't seem to me to be a very good idea. It's what the method *does* that matters. Other ways of doing it may be invented. Such a definition has about the same level of future-proof correlation between cause and effect as We waved a dead chicken at the volcano and it stopped erupting. Cheers, John -- http://mail.python.org/mailman/listinfo/python-list