diff options
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.txt | 87 |
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 + |