Hi, My work (*) in the "Assignment expression and coding style: the while True case" thread helped me to understand something about the *intended* scope.
While technically, assignment expressions keep the same scoping rules than assignment statements, writing "if (x := func()): ..." or "while (x := func()): ..." shows the "intented" scope of the variable. Even if, as explained properly in the PEP, the scope is wider (for good reasons) as "for line in file: ..." keeps line alive after the loop (nothing new under the sun). It's something subtle that I missed at the first read (of the code and the PEP), the difference is not obvious. x = func() if x: ... # obviously use x # do we still plan to use x here? # it's non obvious just by reading the if versus if (x := func()): ... # obviously use x # ":=" in the if "announces" that usually x is no longer used # here, even if technically x is still defined See my match/group PR for more concrete examples: https://github.com/python/cpython/pull/8097/files I understand the current PEP 572 rationale as: assignment expressions reduces the number of lines and the indentation level... pure syntax sugar. IMHO this "intended" scope is a much better way to sell assignment expressions than the current rationale. In fact, it's explained later very quickly in the PEP: https://www.python.org/dev/peps/pep-0572/#capturing-condition-values But it could be better explained than just "good effect in the header of an if or while statement". The PEP contains a good example of the intended scope: if pid := os.fork(): # Parent code # pid is valid and is only intended to be used in this scope ... # use pid else: # Child code # pid is "invalid" (equal to zero) ... # don't use pid # since this code path is common to parent and child, # the pid is considered invalid again here # (since the child does also into this path) ... # don't use pid (*) My work: my current 3 pull requests showing how assignment expressions can be used in the stdlib: while True: https://github.com/python/cpython/pull/8095/files match/group: https://github.com/python/cpython/pull/8097/files list comp: https://github.com/python/cpython/pull/8098/files Victor _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com