Are the critiques in "All the things I hate about Python" valid?

MRAB python at mrabarnett.plus.com
Sun Feb 18 12:51:46 EST 2018


On 2018-02-18 15:44, Michael Torrie wrote:
> On 02/18/2018 05:45 AM, Anders Wegge Keller wrote:
>> På Sun, 18 Feb 2018 07:34:03 -0500
>> Richard Damon <Richard at Damon-Family.org> skrev:
>> 
>>> Python is much stronger typed than PHP, because in PHP you can do things 
>>> like 1 + '2' and get 3, as string values will naturally convert 
>>> themselves to numbers, Python won't do this. Yes Python will freely 
>>> convert between numeric types, but I wouldn't say that Python claims to 
>>> be a language that focuses on numerics.
>> 
>>  Type coercion is not the same as weak typing. Let me stress that the
>> difference between languages having 1 + 1.23 as a valid construct and
>> languages having 1 + '1.23' as a valid construct, is merely a design
>> descision. PHP is fully aware that a string and an integer have different
>> types, and makes a implicit cast, rather than throw an error. 
> 
> And indeed language design decisions bring about weak or strong typing.
> So it's not a stretch at all to say Python has strongly typed objects.
> It does. Once created, objects are what they are; they cannot be changed
> into different objects without creating a new object.
> 
> As for numeric coercion, Python could have made numeric types stronger
> and dropped all coercion. Maybe it should have.  But it appears to
> generally follow the same coercion patters as other commonly-used static
> type languages like C.  In this we can agree that Python's typing was
> weakened, but so also is C.
> 
Some languages, such as Pascal, allow "widening", where an integer can 
be coerced to a real (float), but not the other way round.

C _does_ let you coerce a double to a float (rounding) and both to an 
int (truncating).

> It's interesting to see C++ move to become more like a dynamically-typed
> language like Python.  I recently saw a talk about how C++ inheritance
> is not as good as we all thought it was.  Why should it matter what an
> object inherits from, if it supports the interface we desire? (Duck
> typing, essentially).  So there's now a rather complicated C++17 idiom
> for wrapping objects with special interfaces so that we can make a list
> that contains different types (just like python!) that happen to all
> support the same method signature.  Anyway, was interesting.
> 



More information about the Python-list mailing list