summaryrefslogtreecommitdiff
path: root/sandbox/code-block-directive/docs/for-else-test.py.txt
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/code-block-directive/docs/for-else-test.py.txt')
-rw-r--r--sandbox/code-block-directive/docs/for-else-test.py.txt87
1 files changed, 87 insertions, 0 deletions
diff --git a/sandbox/code-block-directive/docs/for-else-test.py.txt b/sandbox/code-block-directive/docs/for-else-test.py.txt
new file mode 100644
index 000000000..b5ba05848
--- /dev/null
+++ b/sandbox/code-block-directive/docs/for-else-test.py.txt
@@ -0,0 +1,87 @@
+.. # -*- rst-mode -*-
+
+Example for syntax highlight with Pygments
+==========================================
+
+Translate this document to HTML with a pygments enhanced frontend::
+
+ rst2html-pygments --stylesheet=pygments-default.css
+
+or to LaTeX with::
+
+ rst2latex-pygments --stylesheet=pygments-default.sty
+
+to gain syntax highlight in the output.
+
+.. Run the doctests with ``pylit --doctest for-else-test.py``.
+
+
+for-else-test
+-------------
+
+Test the flow in a `for` loop with `else` statement.
+
+First define a simple `for` loop.
+
+.. code-block:: python
+
+ def loop1(iterable):
+ """simple for loop with `else` statement"""
+ for i in iterable:
+ print i
+ else:
+ print "iterable empty"
+ print "Ende"
+
+Now test it:
+
+The first test runs as I expect: iterator empty -> else clause applies:
+
+.. code-block:: pycon
+
+ >>> loop1(range(0))
+ iterable empty
+ Ende
+
+However, the else clause even runs if the iterator is not empty in the first
+place but after it is "spent":
+
+.. code-block:: pycon
+
+ >>> loop1(range(3))
+ 0
+ 1
+ 2
+ iterable empty
+ Ende
+
+It seems like the else clause can only be prevented, if we break out of
+the loop. Let's try
+
+.. code-block:: python
+
+ def loop2(iterable):
+ """for loop with `break` and `else` statement"""
+ for i in iterable:
+ print i
+ break
+ else:
+ print "iterable empty"
+ print "Ende"
+
+And indeed, the else clause is skipped after breaking out of the loop:
+
+.. code-block:: pycon
+
+ >>> loop2(range(3))
+ 0
+ Ende
+
+The empty iterator runs as expected:
+
+.. code-block:: pycon
+
+ >>> loop2(range(0))
+ iterable empty
+ Ende
+