On Sat, Apr 21, 2018 at 5:11 PM, Steven D'Aprano <st...@pearwood.info> wrote: > On Sat, Apr 21, 2018 at 12:30:36PM +1000, Chris Angelico wrote: >> Introducing expression assignments will make these oddities even more >> obvious. You'd be able to demonstrate things like this at function >> scope, not just with a class. > > In what way? > > And are you absolutely sure they will be oddities? To give an analogy, I > don't think this is an oddity: > > py> def func(a=1, b=a+1): > ... pass > ... > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > NameError: name 'a' is not defined > > If anyone expected that the default value for b could make use of the > default value for a, the answer is: no, Python function declarations > don't work that way. Maybe they could, if we wanted them to, but we > don't, so they don't. > > So can you explain specifically what odd function-scope behaviour you > are referring to? Give an example please?
doubled_items = [x for x in (items := get_items()) if x * 2 in items] This will leak 'items' into the surrounding scope (but not 'x'). [x for x in x if x] # This works [x for y in x if x := y] # UnboundLocalError (x for x in 5) # TypeError (x for _ in [1] for x in 5) # Works I'm sure you can come up with more examples. The outermost iterable is special and magical. ChrisA _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com