annotate Demo/classes/Rev.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 8701b93383ab
children 558689b6d7f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1378
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # A class which presents the reverse of a sequence without duplicating it.
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 # From: "Steven D. Majewski" <sdm7g@elvis.med.virginia.edu>
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 # It works on mutable or inmutable sequences.
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 #
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 # >>> for c in Rev( 'Hello World!' ) : sys.stdout.write( c )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 # ... else: sys.stdout.write( '\n' )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 # ...
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 # !dlroW olleH
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 #
1427
8701b93383ab *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1378
diff changeset
11 # The .forw is so you can use anonymous sequences in __init__, and still
1378
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 # keep a reference the forward sequence. )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # If you give it a non-anonymous mutable sequence, the reverse sequence
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 # will track the updated values. ( but not reassignment! - another
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 # good reason to use anonymous values in creating the sequence to avoid
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 # confusion. Maybe it should be change to copy input sequence to break
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 # the connection completely ? )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 #
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 # >>> nnn = range( 0, 3 )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 # >>> rnn = Rev( nnn )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 # >>> for n in rnn: print n
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 # ...
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 # 2
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 # 1
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 # 0
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 # >>> for n in range( 4, 6 ): nnn.append( n ) # update nnn
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 # ...
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 # >>> for n in rnn: print n # prints reversed updated values
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 # ...
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 # 5
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 # 4
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 # 2
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 # 1
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 # 0
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 # >>> nnn = nnn[1:-1]
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 # >>> nnn
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 # [1, 2, 4]
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 # >>> for n in rnn: print n # prints reversed values of old nnn
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 # ...
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 # 5
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 # 4
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 # 2
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 # 1
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 # 0
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 # >>>
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 #
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 # WH = Rev( 'Hello World!' )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 # print WH.forw, WH.back
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 # nnn = Rev( range( 1, 10 ) )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 # print nnn.forw
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 # print nnn
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 #
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 # produces output:
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 #
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 # Hello World! !dlroW olleH
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 # [1, 2, 3, 4, 5, 6, 7, 8, 9]
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 # [9, 8, 7, 6, 5, 4, 3, 2, 1]
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 #
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 # >>>rrr = Rev( nnn )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 # >>>rrr
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 # <1, 2, 3, 4, 5, 6, 7, 8, 9>
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 from string import joinfields
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 class Rev:
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 def __init__( self, seq ):
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 self.forw = seq
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 self.back = self
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 def __len__( self ):
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 return len( self.forw )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 def __getitem__( self, j ):
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 return self.forw[ -( j + 1 ) ]
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 def __repr__( self ):
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 seq = self.forw
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 if type(seq) == type( [] ) :
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 wrap = '[]'
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 sep = ', '
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 elif type(seq) == type( () ) :
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 wrap = '()'
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 sep = ', '
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 elif type(seq) == type( '' ) :
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 wrap = ''
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 sep = ''
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 else:
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 wrap = '<>'
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 sep = ', '
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 outstrs = []
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 for item in self.back :
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 outstrs.append( str( item ) )
b03d00e24c3c Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 return wrap[:1] + joinfields( outstrs, sep ) + wrap[-1:]