[issue35666] Update design FAQ about assignment expression
Carl Bordum Hansen
report at bugs.python.org
Sat Jan 5 11:08:01 EST 2019
New submission from Carl Bordum Hansen <carl at bordum.dk>:
Hi there,
In ``Doc/faq/design.rst`` there is an explanation of why Python does not have assignment in expressions. This is dated since PEP 572 / Python 3.8.
Online version: https://docs.python.org/3/faq/design.html#why-can-t-i-use-an-assignment-in-an-expression
I suggest updating it to the attached file. `git diff`:
```
diff --git a/Doc/faq/design.rst b/Doc/faq/design.rst
index e2d63a0323..e61284611d 100644
--- a/Doc/faq/design.rst
+++ b/Doc/faq/design.rst
@@ -149,7 +149,15 @@ to tell Python which namespace to use.
Why can't I use an assignment in an expression?
-----------------------------------------------
-Many people used to C or Perl complain that they want to use this C idiom:
+In Python 3.8 and newer, you can use assignment in an expression with the
+``:=`` operator (as described in :pep:`572`)::
+
+ while line := f.readline():
+ ... # do something with line
+
+For more than 25 years it was not possible to do assignments in expressions in
+Python. Naturally, many people used to C or Perl would complain that they want
+to use this C idiom:
.. code-block:: c
@@ -157,7 +165,7 @@ Many people used to C or Perl complain that they want to use this C idiom:
// do something with line
}
-where in Python you're forced to write this::
+where in Python you would be forced to write this::
while True:
line = f.readline()
@@ -165,8 +173,10 @@ where in Python you're forced to write this::
break
... # do something with line
-The reason for not allowing assignment in Python expressions is a common,
-hard-to-find bug in those other languages, caused by this construct:
+The reason different operators are used for assignment and assignment in
+expressions (``=`` and ``:=``, respectively), and why Python didn't allow
+assignment in expressions for a long time is a common, hard-to-find bug in
+those other languages, caused by this construct:
.. code-block:: c
@@ -180,11 +190,6 @@ hard-to-find bug in those other languages, caused by this construct:
The error is a simple typo: ``x = 0``, which assigns 0 to the variable ``x``,
was written while the comparison ``x == 0`` is certainly what was intended.
-Many alternatives have been proposed. Most are hacks that save some typing but
-use arbitrary or cryptic syntax or keywords, and fail the simple criterion for
-language change proposals: it should intuitively suggest the proper meaning to a
-human reader who has not yet been introduced to the construct.
-
An interesting phenomenon is that most experienced Python programmers recognize
the ``while True`` idiom and don't seem to be missing the assignment in
expression construct much; it's only newcomers who express a strong desire to
```
----------
assignee: docs at python
components: Documentation
files: design.rst
messages: 333063
nosy: carlbordum, docs at python
priority: normal
severity: normal
status: open
title: Update design FAQ about assignment expression
type: enhancement
versions: Python 3.8
Added file: https://bugs.python.org/file48025/design.rst
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue35666>
_______________________________________
More information about the Python-bugs-list
mailing list