<div dir="ltr"><div class="gmail_quote"><div dir="ltr">[Alexander Belopolsky]</div><div dir="ltr">> ...<br>>  I also think that the dreadfulness of mistyping = where == is expected<br>>  is exaggerated.<br><br>There are a number of core devs who would be rabidly opposed to allowing that confusion in Python, due to still-remembered real-life nightmares in C.  For example, me ;-)  It only takes one wasted day of debugging that typo in a time-critical project to sour you on it for life, and several of us run out of fingers counting the number of days it actually did cost over our C careers.<br><br>>  In all motivating cases, := is used to introduce new bindings rather than<br>> rebinding existing names.<br><br>I've heard people say that several times now, but suspect that's due to that they're looking at "motivating cases" in isolation.  In a function, for example, doing a lot with regexps, blocks like</div><div dir="ltr"><br></div><div dir="ltr">    if m := pat1.search(string):</div><div dir="ltr">    ...</div><div dir="ltr"><br></div><div>    if m := pat2.search(substring):</div><div>   ...</div><div><br></div><div>may be present any number of times.  Only the first such block is _not_ a rebinding.  Reusing short temp names for stuff like this may be almost as common as using `i` and `j` as for-loop target names.<br><br><br>>  Automated code checkers can easily warn users when they rebind<br>> variables in if statements and suggest that they silence the warnings<br>> with redundant (..) if they really want what they wrote.<br><br>Alas, many people new to Python put parens around _all_ `if` and `while` conditions, due to habit carried over from other languages (common as newbies on, e.g., StackOverflow).  They're the most vulnerable.  Nobody in their right mind even suspects that putting parens around an entire expression could have semantic significance.<br><br>    a = 1 + 2  # OK, adds 1 and 2</div><div>    a = (1 + 2) # but who could possibly guess what this means? ;-)<br><br></div><div>But I expect the idea was DOA for the first reason above.</div></div></div>