On Fri, Dec 24, 2021 at 1:36 PM Steven D'Aprano <[email protected]> wrote:
> > 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.
>
My reading of this is that a function IS the type of a function with
that signature, just like how None means the type NoneType. Is that
correct?
Or putting it another way: is this (silly) example legal?
def repeat_string(s: str, times: int) -> str:
return s * times
def decimate_strings(lines: Iterable[str], xfrm: repeat_string) -> List[str]:
return [xfrm(l, 10) for l in lines]
If def creates a function, and def creates the type of a function, it
stands to reason that a function is the type of a function.
ChrisA
_______________________________________________
Python-Dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/KJFQEMO73IP7UIIN2UX74OKKHBAIDN6X/
Code of Conduct: http://python.org/psf/codeofconduct/