[issue41795] Allow assignment in yield statement

2020-09-16 Thread Ronald Oussoren


Change by Ronald Oussoren :


--
resolution:  -> not a bug
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue41795] Allow assignment in yield statement

2020-09-16 Thread Richard Neumann


Richard Neumann  added the comment:

Awesome, I didn't know that.
I tried it without the parens and it gave me a SyntaxError.
This can be closed then as it's obviously already implemented.
Let's get to refactoring.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue41795] Allow assignment in yield statement

2020-09-16 Thread Ronald Oussoren


Ronald Oussoren  added the comment:

You can already do this with the walrus operator:

# ---
def test():
for i in range(10):
yield (square := i * i)

yield square + 1

# ---

This adds some parenthesis to your second alternative.

--
nosy: +ronaldoussoren

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue41795] Allow assignment in yield statement

2020-09-16 Thread Richard Neumann


New submission from Richard Neumann :

I often write factory (deserialization) methods for ORM models for web 
application backends that produce a number of records (ORM model instances) of 
itself and related database tables:

@classmethod
def from_json(cls, json):
"""Yields records from a JSON-ish dict."""
modules = json.pop('modules', None) or ()
order = super().from_json(json)
yield order

for module in modules:
yield OrderedModule(order=order, module=Module(module))

This yields the main record "order" and related records from OrderedModules, 
which have a foreign key to Order.
Thusly I can save all records by:

for record in Order.from_json(json):
record.save()

Since I have several of those deserialization functions for multiple tables in 
multiple databases, it'd be nice to reduce the amount of code with some extra 
syntactic sugar, like:

@classmethod
def from_json(cls, json):
"""Yields records from a JSON-ish dict."""
modules = json.pop('modules', None) or ()
yield order = super().from_json(json)  # Assignment via "="

for module in modules:
yield OrderedModule(order=order, module=Module(module))

or:

@classmethod
def from_json(cls, json):
"""Yields records from a JSON-ish dict."""
modules = json.pop('modules', None) or ()
yield order := super().from_json(json)  # Assignment via ":="

for module in modules:
yield OrderedModule(order=order, module=Module(module))

I therefor propose to allow assignment of names in generator-like yield 
statements as described above.

--
messages: 376979
nosy: conqp
priority: normal
severity: normal
status: open
title: Allow assignment in yield statement
type: enhancement
versions: Python 3.10

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com