Having both if() and for() statements in one liner

Joel Goldstick joel.goldstick at gmail.com
Tue Sep 17 10:32:20 EDT 2013


On Tue, Sep 17, 2013 at 10:17 AM, Tim Chase
<python.list at tim.thechases.com>wrote:

> On 2013-09-17 16:21, Ferrous Cranus wrote:
> > I just want to say tot he program that
> >
> > that only run the for statement if and only if person=='George'
> >
> > I dont see nay reason as to why this fails
> >
> > perhaps like:
> >
> > for times in range(0, 5) if person=='George':
> >
> > but that fails too...
> > there must be written on soem way.
>
> The canonical way to do this is the obvious:
>
>   if person == "George":
>     for times in range(0, 5):
>       ...
>
> That said, you can do stupid things to abstract the logic like
>
>   def iterate_if(condition, iterable):
>     if condition:
>       for item in iterable:
>         yield item
>
> which you can use something like
>
>   for times in iterate_if(person == "George", range(0,5)):
>     ...
>
> but I don't advise it.  Mainly, because the iterable will be
> evaluated when passed as an argument, which incurs the runtime cost.
> In the canonical form, if the test isn't passed, the range(n,m) is
> never even evaluated.
>
> -tkc
>
>
> Tim, that's great! or in the wonderful world of Onslow, "Oh nice"
http://en.wikipedia.org/wiki/Onslow_(Keeping_Up_Appearances)


>
>
> --
> https://mail.python.org/mailman/listinfo/python-list
>



-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20130917/02bf42e3/attachment.html>


More information about the Python-list mailing list