On Apr 1, 2:32 pm, Arnaud Delobelle <arno...@googlemail.com> wrote:
> Lada Kugis <lada.ku...@gmail.com> writes:
> > I'm coming from fortran and c background so I'm certainly biased by
> > them. But if you could explain one thing to me:
>
> > in fortran for example:
> > for i=1,n
> > goes from 1,2,3,4,...,n
>
> > in python for example:
> > for i in range(1,n)
> > goes from 1,2,3,4,...,n-1
> > (that is, it goes from 1 up to, but not including n)
>
> > Why is that so ? What were the reasons for that "not including" part ?
> > It troubles me greatly, and I cannot see it's advantages over the
> > "standard" "up to and including" n.
>
> > Best regards
> > Lada
>
> Luckily Python allows you to create your own indexing on lists:
>
> def dec(i):
>     if isinstance(i, slice):
>         return slice(dec(i.start), dec(i.stop), i.step)
>     elif i is None or i < 0:
>         return i
>     else:
>         return i - 1
>
> defop = """
> def __%sitem__(s,i,*r):
>     val = list.__%sitem__(s,dec(i),*r)
>     if isinstance(i, slice): val = List1(val)
>     return val
> def __%sslice__(s,i,j,*r):
>     return List1(list.__%sslice__(s,dec(i),dec(j),*r))
> """
>
> class List1(list):
>     for op in 'del', 'get', 'set':
>         exec defop % (op, op, op, op)
>     def index(self, x):
>         return list.index(self, x) + 1
>     def insert(self, i, x):
>         list.insert(self, dec(i), x)
>     def pop(self, i=None):
>         return list.pop() if i is None else list.pop(dec(i))
>     for op in 'add', 'mul', 'radd', 'rmul':
>         exec "def __%s__(*r): return List1(list.__%s__(*r))" % (op, op)
>
> l1 = List1(range(10))
> l2 = List1("Python rules")
>
> I'll let you play with l1 and l2.

If I were your boss and you ever pulled something like this, your ass
would be so fired.

This is unforgiveable, not only changing the indexing semantics of
Python (because a user would have NO CLUE that something underlying
has been changed, and thus it should never be done), but also for the
needless abuse of exec.


Carl Banks
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to