On Tue, Nov 30, 2021 at 09:17:13AM +0000, Paul Moore wrote:

> Also, related to the question Terry raised, IMO it would be useful to
> have a clear statement on code that *does* use type annotations, but
> violates them at runtime. To be specific, is the following considered
> as an error?
> 
> >>> def muladd(x: int, y: int, z: int) -> int:
> ...     return x * (y+z)
> ...
> >>> muladd(3.1459, 87.33, 2.7e2)
> 1124.124447

Isn't that just duck-typing? You've got a function that is documented as 
taking arguments of one type (int), but actually will work with any 
numeric type (and some non-numeric types) that quacks like an int.

    muladd(2, 'ab', 'cd')  # returns 'abcdabcd'

If you replaced the type annotations with a docstring that listed the 
parameters x, y, z as int, would duck-typing be wrong? Maybe.

I don't think we can make any concrete claims here. Sometimes 
duck-typing is perfectly fine. Sometimes its not. It depends on the 
function's implementation and its semantics. Sometimes calling a 
function with a duck-typed value seems to work fine but the result is 
meaningless junk. (Garbage In, Garbage Out.)

I guess all we can say is that the Python language is agnostic and 
neutral on this matter.


-- 
Steve
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/W24VGDUH6F43C6VT4OUGERNEZFW223MP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to