summaryrefslogtreecommitdiff
path: root/sandbox/code-block-directive/tools/pygments-enhanced-front-ends/for-else-test.py
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/code-block-directive/tools/pygments-enhanced-front-ends/for-else-test.py')
-rw-r--r--sandbox/code-block-directive/tools/pygments-enhanced-front-ends/for-else-test.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/sandbox/code-block-directive/tools/pygments-enhanced-front-ends/for-else-test.py b/sandbox/code-block-directive/tools/pygments-enhanced-front-ends/for-else-test.py
new file mode 100644
index 000000000..d3edf4400
--- /dev/null
+++ b/sandbox/code-block-directive/tools/pygments-enhanced-front-ends/for-else-test.py
@@ -0,0 +1,85 @@
+# 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
+#