[Python-3000] Changing behavior of sequence multiplication by negative integer
Jim Jewett
jimjjewett at gmail.com
Thu Aug 10 16:13:14 CEST 2006
Lawrence Oluyede wrote:
> seq * -5
> and to be honest I've never seen code like that because the semantics
> is somewhat senseless to me
To be honest, I would almost expect the negative to mean "count from
the end", so that it also reversed the sequence. It doesn't, but ...
it does make for a hard-to-explain case.
> ... evaluation of "Sequence * negative integer" should be changed from:
> >>> "foobar" * -1
> ''
> > ... to something throwing an exception like when you try to multiplicate
> > the sequence by a floating point number:
Agreed.
On 8/10/06, Nick Coghlan <ncoghlan at gmail.com> wrote:
> The "negative coerced to 0" behaviour is to make it easy to do things like
> padding a sequence to a minimum length:
> seq = seq + pad * (min_length- len(seq))
Typically, if I need to pad a sequence to a minimum length, I really
need it to be a specific length. Having it already be too long is
likely to cause problems later. So I really do prefer the explicit
version.
Also compare this to the recent decision that __index__ should *not*
silently clip to a C long
> Without the current behaviour, all such operations would need to be rewritten as:
> seq = seq + pad * max((min_length- len(seq)), 0)
I would write it as
# Create a record-size pad outside the loop
pad = " "*length
...
seq = (seq+pad)[:length]
-jJ
More information about the Python-3000
mailing list