Re: Python (was Re: Recent history of vi)
Richard Kettlewell <[email protected]> Sat, 20 Dec 2025 10:12:49 +0000
| Newsgroups | comp.os.linux.misc,alt.folklore.computers,comp.lang.python |
|---|---|
| Organization | terraraq NNTP server |
| Message-ID | <[email protected]> |
candycanearter07 <[email protected]> writes: > Lawrence D’Oliveiro <[email protected]> wrote at 02:05 this Sunday (GMT): >> On 13 Dec 2025 11:55:35 GMT, Stéphane CARPENTIER wrote: >>> Everything else is just a lot of lies. They pretend it's not >>> strongly typed, but in the real world you will only encounter a lot >>> of issue if you believe that. >> >> Think about why both JavaScript and PHP need a “===” operator, while >> Python does not. >> >> It’s because Python is strongly typed. > > I thought it was because JS was too liberal with type-casting to make > things true, and the JS devs didn't want to break compatibility. “No implicit type conversion” is one of the definitions of strong typing, at least back to the 1970s[1]. And JavaScript is certainly weakly typed in that sense: > 'a' + 1 'a1' > 1/false Infinity What dividing by a boolean could possibly mean is a mystery, but JavaScript will do it anyway. Python fits this definition of strong typing up to a point: >>> 'a' + 1 Traceback (most recent call last): File "<python-input-0>", line 1, in <module> 'a' + 1 ~~~~^~~ TypeError: can only concatenate str (not "int") to str However it only goes so far, for example many things will implicitly convert to bool: >>> not '' True >>> not {} True When you define your own classes, you can arrange for them to perform arithmetic with other types without explicit conversions too. Another property suggested in [1] for ‘strong typing’ is that functions can only be called with with arguments matching a declared type. In Python, function arguments do not have declared types[2] and does not even infer them; anything goes. You will only hit an exception if you try to use the arguments in the wrong way. >>> def f(a,b): ... return a + b ... >>> f("a", "a") 'aa' >>> f(0,0) 0 >>> f("a", 0) Traceback (most recent call last): File "<python-input-4>", line 1, in <module> f("a", 0) ~^^^^^^^^ File "<python-input-0>", line 2, in f return a + b ~~^~~ TypeError: can only concatenate str (not "int") to str [1] https://dl.acm.org/doi/epdf/10.1145/942572.807045 [2] you can put in type annotations but the language implementation ignores them - you need to run a separate static checker. I would say that although Python does have some aspects of strong typing, it is mostly weakly typed. -- https://www.greenend.org.uk/rjk/