There were multiple threads about this (or maybe the thread was split by mailers) and I already stated that the colon-free (and hence body-less) syntax with def is too confusing to consider. Please look it up in the archives. Happy Holidays!
On Thu, Dec 23, 2021 at 18:36 Steven D'Aprano <st...@pearwood.info> wrote: > On Thu, Dec 23, 2021 at 05:09:18PM -0800, Guido van Rossum wrote: > > > > def func(params) > > > > > > makes a Callable type object? > > > > > > > No, no, no. That syntax has already been discredited. > > It has? Where? Have I missed something? > > This thread is about using that syntax as an alternative to Mark's > proposal. If it is already ruled out, then somebody should mention it > to asleep.cult (the original poster of this thread). > > I'm curious: what objections to asleep.cult's proposal don't equally > apply to Mark's proposal? From what I can see, Mark's original proposal > has all the same disadvantages, plus it is even more verbose. > > Dropping the need for the @Callable decorator reduces the level of > verbosity somewhat (one less line, nine fewer characters) but all the > other negatives remain. > > Honestly, I cannot see a single positive to using `def` statements. > Sure, we can do it, and an experienced programmer could infer the > meaning of it, but given the choice of writing an anonymous type in > place where you want it, versus having to pre-declare a function > prototype with a name that adds nothing to the readability of the code > before using it, why would I prefer the `def` version? > > This is not a rhetorical question. > > The fact that the existing feature (Callable) and the PEP 677 arrow > syntax are anonymous, and can be written in place rather than needing to > be pre-declared with a name, are positives. *Requiring* a name to use > this `def` syntax is a point against it. > > If I need a named type alias, I can already create one, and name it: > > IntToIntFunc = Callable[[int], int] > > and while I can see that there are complicated signatures where a named > alias would be useful: > > FileOpener = Callable[ ... ] # complicated signature > > we can already do that, so the `def` syntax adds nothing. For simple > cases we don't need a name. The name IntToIntFunc adds nothing that > isn't just as clear, if not more so, in the signature itself. It is like > the comment: > > x += 1 # add one to x > > > > Mark's proposal was > > ``` > > @Callable > > def func(params): pass > > ``` > > Indeed, and I already wrote a criticism of that proposal. > > Removing the decorator saves one line and nine characters, but the other > criticisms remain. > > > > My question is, why does it need `@Callable`? Lukasz proposed just using > > any (undecorated) function, with the convention being that the body is > > `...` (to which I would add the convention that the function *name* be > > capitalized, since it is a type). > > But without the Callable decorator, it isn't a type, its a function. > You're just using it as a type (or to be precise, a function prototype). > > I'm okay with naming conventions reflecting usage (we sort of already do > that, with int, float, etc) but we should be clear about what's really > happening. `def` creates a function. > > > -- > Steve > _______________________________________________ > Python-Dev mailing list -- python-dev@python.org > To unsubscribe send an email to python-dev-le...@python.org > https://mail.python.org/mailman3/lists/python-dev.python.org/ > Message archived at > https://mail.python.org/archives/list/python-dev@python.org/message/VTOOJLPU2HPIW6TQBBYTW64W4DFGCQEG/ > Code of Conduct: http://python.org/psf/codeofconduct/ > -- --Guido (mobile)
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/O4RHT7JW7VGWUQSQ3QFVVP6XYQGJKVQI/ Code of Conduct: http://python.org/psf/codeofconduct/