Recurring patterns: Am I missing it, or can we get these added to the language?
Mike Driscoll
kyosohma at gmail.com
Tue Apr 15 15:30:49 EDT 2008
On Apr 15, 1:51 pm, Erich <sophac... at gmail.com> wrote:
> Hello all,
>
> Today I found myself once again defining two functions that I use all
> the time: nsplit and iterable. These little helper functions of mine
> get used all the time when I work. Im sick of having to define them
> (but am very good at it these days, less than 1 typo per function!).
> It leads me to the following questions
>
> 1. Is this functionality already built in and im just missing it
> 2. Is there some well known, good technique for these that I missed?
> 3. Insert question I need to ask here (with a response)
>
> These are the funtions w/ explaination:
>
> def nsplit(s,p,n):
> n -= 1
> l = s.split(p, n)
> if len(l) < n:
> l.extend([''] * (n - len(l)))
> return l
>
> This is like split() but returns a list of exactly lenght n. This is
> very useful when using unpacking, e.g.:
> x, y = nsplit('foo,bar,baz', ',', 2)
>
> def iterable(item, count_str=False):
> if not count_str and isinstance(item, str):
> return False
> try:
> iter(item)
> except:
> return False
> return True
> This is just simple boolean test for whether or not an object is
> iterable. I would like to see this in builtins, to mirror callable.
> The optional count_str adds flexibility for string handling, since
> sometimes I need to iterate over a string, but usually not. I
> frequently use it to simplify my case handling in this type of
> costruct:
Just found this thread on the subject:
http://mail.python.org/pipermail/python-list/2006-July/394487.html
That might answer your question.
>
> def foo(bar):
> bar = bar if iterable(bar) else [bar]
> for x in bar:
> ....
>
> Thanks for feeback,
> Erich
Mike
More information about the Python-list
mailing list