]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-111307: Update design FAQ 'switch' entry (#115899)
authorTerry Jan Reedy <tjreedy@udel.edu>
Wed, 13 Mar 2024 05:30:39 +0000 (01:30 -0400)
committerGitHub <noreply@github.com>
Wed, 13 Mar 2024 05:30:39 +0000 (01:30 -0400)
Doc/faq/design.rst

index 300e1b6cc40a58a0e6649f9e090f9017a0ab38e3..c8beb64e39bc1a34eaccbabb0dfb9d62704f20be 100644 (file)
@@ -259,9 +259,11 @@ is evaluated in all cases.
 Why isn't there a switch or case statement in Python?
 -----------------------------------------------------
 
-You can do this easily enough with a sequence of ``if... elif... elif... else``.
-For literal values, or constants within a namespace, you can also use a
-``match ... case`` statement.
+In general, structured switch statements execute one block of code
+when an expression has a particular value or set of values.
+Since Python 3.10 one can easily match literal values, or constants
+within a namespace, with a ``match ... case`` statement.
+An older alternative is a sequence of ``if... elif... elif... else``.
 
 For cases where you need to choose from a very large number of possibilities,
 you can create a dictionary mapping case values to functions to call.  For
@@ -290,6 +292,9 @@ It's suggested that you use a prefix for the method names, such as ``visit_`` in
 this example.  Without such a prefix, if values are coming from an untrusted
 source, an attacker would be able to call any method on your object.
 
+Imitating switch with fallthrough, as with C's switch-case-default,
+is possible, much harder, and less needed.
+
 
 Can't you emulate threads in the interpreter instead of relying on an OS-specific thread implementation?
 --------------------------------------------------------------------------------------------------------