[Python-ideas] Optional static typing -- the crossroads

Stefan Behnel stefan_ml at behnel.de
Sun Aug 17 16:37:13 CEST 2014


Greg Ewing schrieb am 17.08.2014 um 12:31:
> Nicholas Cole wrote:
>> On Sun, Aug 17, 2014 at 3:08 AM, Steven D'Aprano wrote:
>>
>>>    def __init__(self,
>>>            description:str, sec_code:str,
>>>            vendor_name:str, vendor_inv_num:str,
>>>            vendor_rtng:str, vendor_acct:str,
>>>            transaction_code:str, vendor_acct_type:str,
>>>            amount:int, payment_date:Any)->None:
>>
>> I had to stare at that block of
>> code for a long time to see how many and what type of arguments it
>> called.
> 
> Pascal's function signature syntax had a nice feature
> that everyone else seems to have forgotten about. If you
> had multiple parameters of the same type, you only had
> to write the type once:
> 
>     procedure Init(description, sec_code, vendor_name,
>         vendor_inv_num, vendor_rtng, vendor_acct,
>         transaction_code, vendor_acct_type, amount: str;
>         payment_date: Any)
> 
> Disappointingly, Python's annotations make the same
> blunder as C, and most other languages since, in
> requiring each parameter to have its own individual
> annotation.

The difference is that Pascal requires type declarations whereas they are
purely optional in Python. That makes the case that they are "missing" the
right thing to optimise for, i.e. they should be explicit where they are
and not take away space where they are not. Allowing argument sequences
under a single type annotation would require some kind of marker for either
that list or for the other arguments that are not typed. If you have a long
argument list of, say, three positional arguments and ten optional keyword
arguments, and you only want to annotate the first two positional arguments
with types and leave the rest free, that's a lot nicer to express with two
explicit type annotations than with grouped annotations and (potentially)
explicit non-annotations.

Stefan




More information about the Python-ideas mailing list