(original) (raw)

On 4/1/07, Gustavo Carneiro <gjcarneiro@gmail.com> wrote:


On 4/1/07, Georg Brandl <g.brandl@gmx.net> wrote:
[...]



Example
=======

This is the standard ``os.path.normpath`` function, converted to type declaration
syntax::

     def normpathƛ(path✎)✎:
         """Normalize path, eliminating double slashes, etc."""

         if path✎ == '':
             return '.'
         initial_slashes✓ = path✎.startswithƛ('/')✓
         # POSIX allows one or two initial slashes, but treats three or more
         # as single slash.

         if (initial_slashes✓ and
             path✎.startswithƛ('//')✓ and not path✎.startswithƛ('///')✓)✓:
             initial_slashesℕ = 2
         comps♨ = path✎.splitƛ('/')♨

         new_comps♨ = []♨

         for comp✎ in comps♨:
             if comp✎ in ('', '.')⒯:
                 continue
             if (comp✎ != '..' or (not initial_slashesℕ and not new_comps♨)✓ or
                  (new_comps♨ and new_comps♨[-1]✎ == '..')✓)✓:

                 new_comps♨.appendƛ(comp✎)
             elif new_comps♨:
                 new_comps♨.popƛ()✎
         comps♨ = new_comps♨
         path✎ = '/'.join(comps♨)✎
         if initial_slashesℕ:

             path✎ = '/'*initial_slashesℕ + path✎
         return path✎ or '.'

As you can clearly see, the type declarations add expressiveness, while at the
same time they make the code look much more professional.


  Is this supposed to be a joke?

  /me ashamed for not having noticed the date of this PEP... :P

--
Gustavo J. A. M. Carneiro
"The universe is always one step beyond logic."