[Python-ideas] Fwd: quantifications, and tuple patterns

Alexander Heger python at 2sn.net
Tue Jan 17 05:00:52 CET 2012


Dear Tom,

> I'm wondering if would make sense to add an "as" clause to the while and if
> statements, similar to the as clause in the with statement. It would
> essentially retrieve the value field from the witness object described
> above.
>
> This would let one write the main loop in a topological sort (a classic
> workset algorithm) as:
>
>      while any(v for v in vertices if v.incoming_count == 0) as v1:
>          result.append(v)
>          for v2 in v1.outgoing:
>              v2.incoming_count -= 1

I had the same thought going through the thread, but I think the problem 
here would be that any is a function that returns a Boolean value.  You 
could add a key parameter to return something else, say a tuple of a 
truth value and a sample ( any( ..., sample = True) ) but that could 
break because

1) "any" could be another function in the context,

2) while would need to deal with special return values in this case

A suggestion to replace the "while any" case is

sample <generator expression> as x:
    # do something with x

  ("sample" may not be the best keyword choice) From the discussion so 
far I do not see how to easily avoid having a new keyword

specifically, your example would become

sample v for v in vertices if v.incoming_count == 0 as v1:
     # do things with v1

In case you only want one sample, you could add the break statement

sample db.query(page_name=page_name) as page:
     render_template(page)
     break
else:
     error404()


-Alexander



More information about the Python-ideas mailing list