On Sat, 17 Dec 2011 21:03:01 -0600, Evan Driscoll wrote: > Something like ML or Haskell, which does not even allow integer to > double promotions, is very strong typing. Something like Java, which > allows some arithmetic conversion and also automatic stringification (a > la "1" + 1) is somewhere in the middle of the spectrum. Personally I'd > put Python even weaker on account of things such as '[1,2]*2' and '1 < > True' being allowed,
They are not examples of weak typing. The first is an example of operator overloading, the second is a side-effect of a compromise made for backwards compatibility. If the first example were written: [1, 2].repeat(2) I expect you'd be perfectly happy with it as an unexceptional example of a list method: it takes an integer count, and returns a new list consisting of the elements of the original list repeated twice. If it were written: [1, 2].__mul__(2) you'd probably raise an eyebrow at the ugliness of the method name, but you would be okay with the concept. Well, that's exactly what it is in Python: the list __mul__ method performs sequence multiplication (repeating the contents), which overloads the * operator. No automatic type conversions needed, so not an example of weak typing. As for comparisons between ints and True or False, that's not weak typing either, because True and False *are* ints: bool is a subclass of int. This was done purely for historical reasons: originally Python didn't have a bool type, and you used 0 and 1 by convention for boolean values. When it was decided to add a bool type, the least disruptive way to do this was to define it as a subclass of int. -- Steven -- http://mail.python.org/mailman/listinfo/python-list