[Python-ideas] Fwd: quantifications, and tuple patterns (original) (raw)
Nick Coghlan ncoghlan at gmail.com
Tue Jan 17 12:16:39 CET 2012
- Previous message: [Python-ideas] Fwd: quantifications, and tuple patterns
- Next message: [Python-ideas] Fwd: quantifications, and tuple patterns
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Tue, Jan 17, 2012 at 3:39 PM, Ethan Furman <ethan at stoneleaf.us> wrote:
Paul Moore wrote:
On 16 January 2012 14:47, Devin Jeanpierre <jeanpierreda at gmail.com> wrote:
You can always add a full-on assignment-as-expression, if you're concerned about that. if (m := pat.search(data)) is not None: Also, the keyword doesn't have to be "if". I've always read the bar as "such that" or "where". I suggested that a while back in this thread (in the form of any(var := val for val in itr if pred)). It didn't get much traction In the matter of := being used for assignment-as-expression... +1!
Assignments as expressions aren't all that easy to use in the "some" case that started the thread, and the reason is the same as the reason iteration variables in comprehensions don't leak into the surrounding scope any more: generator expressions and comprehensions create their own scope, separate from that of the containing function.
If Python ever did get assignment expressions, the most likely candidate would actually be based on the existing use of "as" for naming (or renaming) things:
if (pat.search(data) as m) is not None:
...
while (next(p1 for (s0, p1) in decisions if s0==slot_num, None) asp1) is not None: ...
However, assignments as expressions are still a long way from being shown to ever improve clarity enough to be worth the additional language complexity.
Getting back specifically to the quantification question, I wonder if being able to explicitly export an iteration variable from a comprehension might work:
while any(s0 == slot_num for (s0, some p1) in decisions):
...Abusing it for embedded assignments is still ugly, but at least vaguely comprehensible once you're familiar with the meaning of 'some':
if any(m is not None for some m in [pattern.search(data)]):
...(As far as how that could actually work goes, with the bindings limited to simple names, as they are for iteration variables, you could probably just make the relevant mapping available inside the comprehension for class and module namespaces and make use of the nonlocal machinery for function namespaces)
I still can't honestly say I like the idea, but I at least dislike it less than anything else I've seen in the thread so far :)
Cheers, Nick.
-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
- Previous message: [Python-ideas] Fwd: quantifications, and tuple patterns
- Next message: [Python-ideas] Fwd: quantifications, and tuple patterns
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]