On 11Aug2021 09:11, Hope Rouselle <hrouse...@jevedi.com> wrote:
>Greg Ewing <greg.ew...@canterbury.ac.nz> writes:
>> That may not be doing what you think it's doing. Consider also
>>
>>>>> if0: print('yes!')
>> yes!
>
>So, yes, that's puzzling.
>
>>>> 0 == False
>True
>>>> if0: print("yes")
>yes
>>>> if(0): print("yes")
>
>>>>
>
>What's going on there?

1: "if0" does not mean "if 0"; "if0" is a valid identifier. Like "x0", "x1".

2: It took me a while to see, but this is a type annotiation.

This line:

    if0: print('yes!')

says that the name "if0" should contain a value described by the return 
value of the expression "print('yes!')". Like this:

    label : str

says that we expect a string in the variable "label".

Remember that Python is strongly typed, but variables may reference 
objects of any type. Type annotations are optional things reflecting 
that in practice most variables are expected to reference specific 
types. This lets is run static linters against programmes to catch 
mistakes exposed by the type descriptions.

Also, type annotations have _no_ runtime effect. So if that expression 
returns an invalid type description, nobody cares!

However, if you hand this code to a type aware linter such as mypy you 
might get bitter complaints about nonsense. (Or, since print() returns 
None, no complaint - it just means you expect this variable to hold the 
value None. You'd get complaints about unused variables etc.)

Cheers,
Cameron Simpson <c...@cskk.id.au>
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to