On Sat, 20 May 2017 11:57 am, Chris Angelico wrote:

> They're function metadata. What would the principle of least surprise
> say about this?
> 
> print("Spam")
> def func(arg: print("Foo") = print("Quux")):
>     print("Blargh")
> print("Fred")
> func()
> print("Eggs")
> 
> What should be printed, and in what order?

My prediction:

Spam
Foo
Quux
Fred
Blargh
Eggs

but I wouldn't be the least bit astonished if Foo and Quux are in the
opposite order. As in fact they are.

> Actually, Python does violate least-surprise in one area here. There's
> one message that gets printed "out of order" compared to my
> expectation. I wonder if it's the same one that other people will be
> surprised at.


The reason appears to be that the default arguments are evaluated first,
from left to right, followed by the annotations:


py> def func(a:print(1)=print(2), b:print(3)=print(4), c:print(4)=print(5)):
...     pass
...
2
4
5
1
3
4




-- 
Steve
Emoji: a small, fuzzy, indistinct picture used to replace a clear and
perfectly comprehensible word.

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to