Bools and explicitness [was Re: PyWart: The problem with "print"]

Steven D'Aprano steve+comp.lang.python at pearwood.info
Thu Jun 6 05:29:02 EDT 2013


On Thu, 06 Jun 2013 12:29:44 +1000, Chris Angelico wrote:

> On Thu, Jun 6, 2013 at 11:56 AM, Steven D'Aprano
> <steve+comp.lang.python at pearwood.info> wrote:
>> On Wed, 05 Jun 2013 14:59:31 -0700, Russ P. wrote:
>>> As for Python, my experience with it is that, as your application
>>> grows, you start getting confused about what the argument types are or
>>> are supposed to be.
>>
>> Whereas people never get confused about the arguments in static typed
>> languages?
>>
>> The only difference is whether the compiler tells you that you've
>> passed the wrong type, or your unit test tells you that you've passed
>> the wrong type. What, you don't have unit tests? Then how do you know
>> that the code does the right thing when passed data of the right type?
>> Adding an extra couple of unit tests is not that big a burden.
> 
> The valid type(s) for an argument can be divided into two categories:
> Those the compiler can check for, and those the compiler can't check
> for. Some languages have more in the first category than others, but
> what compiler can prove that a string is an
> HTML-special-characters-escaped string? In a very few languages, the
> compiler can insist that an integer be between 7 and 30, but there'll
> always be some things you can't demonstrate with a function signature.
> 
> That said, though, I do like being able to make at least *some*
> declaration there. It helps catch certain types of error.

*shrug*

I don't terribly miss type declarations. Function argument declarations 
are a bit simpler in Pascal, compared to Python:


Function Add(A, B : Integer) : Integer; 
Begin
 Add := A + B;
End;


versus


def add(a, b):
    if not (isinstance(a, int) and isinstance(b, int)):
        raise TypeError
    return a + b


but not that much simpler. And while Python can trivially support 
multiple types, Pascal cannot. (Some other static typed languages may.)

Whatever benefit there is in declaring the type of a function is lost due 
to the inability to duck-type or program to an interface. There's no type 
that says "any object with a 'next' method", for example. And having to 
declare local variables is a PITA with little benefit.

Give me a language with type inference, and a nice, easy way to keep duck-
typing, and I'll reconsider. But until then, I don't believe the benefit 
of static types comes even close to paying for the extra effort.



-- 
Steven



More information about the Python-list mailing list