[Tutor] the use of the COLON

ThreeBlindQuarks threesomequarks at proton.me
Thu May 11 22:16:45 EDT 2023


Thank you Alan, yes that makes much sense as optional extensions to python that I have never felt any urgency to try.

It is a bit like people used to ask me about C code that included pre-processor directives like $DEFINE or #IF which do not end up in the code being compiled except indirectly by filling out parameters or choosing which snippets are included to compile for a specific target.

They are not part of the C language definition in the sense that a working compiler need not deal with them unless it feels like doing all the work.

It is a tad annoying that a language re-uses the same symbols in so many ways that my first impression of what a colon might mean was off in left field.

then again, this uses colons too and clearly in another way:

>>> text = "Sxyeabccdrfgehit"
>>> text[0::3]
'Secret'


Sent with Proton Mail secure email.

------- Original Message -------
On Thursday, May 11th, 2023 at 7:58 PM, Alan Gauld via Tutor <tutor at python.org> wrote:


> On 12/05/2023 00:08, ThreeBlindQuarks via Tutor wrote:
> 
> > When you say something WORKS, what do you mean?
> 
> 
> In this case it means the variable dummy_user_list is assigned the value
> in the statement, ie [[...]]
> 
> > Do you mean later code indicates it did what was expected?
> 
> 
> No, the later code ignores the type definition completely, it's
> intended for third party tools to pick up on - I guess linters etc?
> 
> > This may sound like a dumb question but there seem to be a few anomalies in the code:
> > 
> > dummy_user_list: list=[["johnf", "jfabiani1947"]]
> > 
> > The first is this:
> > 
> > dummy_user_list:
> > 
> > Python does have a concept of starting an indented scope with a colon
> 
> 
> This is not an indented code type colon but a type definition.
> I admit I'm not a fan of the type hinting stuff in Python but
> it is what it is, and this is it...
> 
> So the colon in this case is saying that the thing that follows
> is a type (and optional assignment)
> 
> > On my machine, code like:
> > 
> > hello:
> > 
> > gets an error method about syntax.
> 
> 
> Yes because ther is no type provided
> 
> hello: str
> 
> would work and tell Python/linter that the variable hello should
> be a string.
> 
> > Second, the word "list" is the name of a function and at best
> 
> 
> Technically its the name of a type and the type constructor.
> Which is treated a little differently from regular functions.
> 
> > it can be very poor form to use it as a variable name.
> 
> 
> Despite being on the left of an assignment it is actually being used as
> a type name in this statement. The variable name is dummy_user_list
> 
> > In the code you shared that does not generate an error for me
> > either, it is NOT setting a variable called list to a value:
> 
> 
> Thats true it is setting the variable dummy_user_list to the
> value in the assignment which corresponds with the type hint,
> namely a list. (a list of lists in this case but Python doesn't
> care, it's still a list!)
> 
> > > > > dummy_user_list: list=[["johnf", "jfabiani1947"]]
> > > > > list
> > > > > <class 'list'>
> > > > > print(list)
> > > > > <class 'list'>
> 
> 
> Try
> 
> > > > > dummy_user_list
> > > > > [['johnf', 'jfabiani1947']]
> 
> > But if I leave out the meaningles colon part, it does overwrite:
> 
> 
> Not meaningless, it is a type declaration.
> 
> > > > > list=[["johnf", "jfabiani1947"]]
> 
> 
> But this is just a regular assignment so you override the name list.
> 
> > Finally, what was the purpose of [["johnf", "jfabiani1947"]]
> > versus just ["johnf", "jfabiani1947"] in Python?
> 
> 
> Its a list of lists. The first element is ["johnf", "jfabiani1947"]
> but others could be added:
> 
> > > > dummy_user_list.append(['another', 'value'])
> > > > dummy_user_list
> 
> [['johnf', 'jfabiani1947'], ['another', 'value']]
> 
> > Back to your question, on MY SETUP, the code you mentioned only
> > works in the sense of no error but does nothing useful.
> 
> 
> That's correct for vanilla Python. I believe there are tools that
> will spit out type warnings etc based on earlier hints.
> 
> > Anything after the : may as as well be a comment but not exactly.
> 
> 
> Not exactly, the assignment part of the statement is still valid
> and does assign a value to the variable.
> 
> > But it gets weirder when I wonder if "hello" is seen as a variable.
> > I chose new undefined names:
> > 
> > > > > print(myname)
> > > > > NameError: name 'myname' is not defined
> > > > > who="me"
> > > > > myname: who="Quark"
> 
> 
> Because vanilla Python doesn't do anything with the type declaration it
> accepts any recognised name as a type. An unrecognised name gives an error:
> 
> > > > y:blippidy=6
> 
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> 
> NameError: name 'blippidy' is not defined
> 
> > > > y:dummy_user_list=666
> > > > y
> 
> 666
> 
> So although 666 is not a list(the type of dummy_user_list) Python
> silently accepts the name then assigns an integer to the variable!
> 
> > > > > print(who)
> > > > > me
> > > > > print(myname)
> > > > > Quark
> 
> 
> So the assignment to myname works as expected without any error.
> 
> > So the above shows that at the start, there was no variable
> > called "myname" and there was one of 'who' and yet the assignment
> > to who was NOT done and yet passed along to 'myname'!!!
> 
> 
> Nope, 'who' was recognised as a potential type name and the assignment
> was made directly to myname.
> 
> > You could experiment more, but this behavior does not look
> > like it was planned to be used by us!
> 
> 
> It was planned to be read by tools and written by programmers
> who get very uptight about static typing!
> 
> > > > > mytown: z="three"
> > > > > x="one"
> > > > > y="two"
> 
> 
> I get an indentation error when I try that...
> 
> > But another egg sperm meant indicates the scope is LOCAL
> 
> 
> Nope, nothing to do with scopes here. Just a slightly
> confusing type declaration syntax. One which does nothing
> much of any use in the real world! (But might do someday...)
> 
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
> http://www.amazon.com/author/alan_gauld
> Follow my photo-blog on Flickr at:
> http://www.flickr.com/photos/alangauldphotos
> 
> 
> 
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor


More information about the Tutor mailing list