On Wed, 1 Jun 2022 at 03:34, Aaron L via Python-ideas
<python-ideas@python.org> wrote:
>
> Thanks for your reply.
>
> > What's the advantage?
>
> I brought this up thinking about explicitness and readability. Say you want 
> to figure out what this function is doing:
>
> ````
> def foo() -> t.Iterator[T]:
>     [... 300 lines of code]
> ```
>
> Is this a generator function? I'd argue that whether it's a generator 
> function or not is fundamental to being able to read it. The type hint alone 
> doesn't tell you whether you're looking at a generator function or not - it 
> might just construct and return an iterator.
>

Does it actually matter whether it's a generator, or returns some
other type of iterable? What's the difference between these two
functions:

def enumerate_spam(n):
    yield "spam 1"
    yield "spam 2"
    yield "spam 3"
    yield n
    yield "the rest of the spam"

def enumerate_default_spam():
    return enumerate_spam("default")

Technically, one of these is a generator, and one is not. But the
return value from both of them is a generator object. You can send it
values, get values back, all the things you can do with a generator.
How fundamental is it that THIS function is a generator, rather than
simply that it returns an iterator (or that it returns a
generator/coroutine object, etc)?

If your function is really just named "foo" and has 300 lines of code,
you have other problems. Normally, the function's name should tell you
a lot. In your case, you seem to also have a return type hint, which
tells you a bit more, so that ought to be sufficient?

Maybe that's not sufficient for your codebase. Well, that's what
docstrings and decorators and code comments are for :)

ChrisA
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/7DC4LRAJXIIAPH43NCFJJIAKUG4M6RPD/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to