<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, May 30, 2016 at 11:08 PM Steven D'Aprano <<a href="mailto:steve@pearwood.info">steve@pearwood.info</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon, May 30, 2016 at 06:16:26PM -0700, Guido van Rossum wrote:<br>
<br>
[...]<br>
>   T = TypeVar('T')<br>
>   x = Symbol('x')<br>
><br>
> I'm sure this is not a new idea, but so far I've always thought that<br>
> this is pretty esoteric and the approach here is good enough.<br></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This comes up a lot and it would be nice to clean it up.<br>
<br>
T = type('T', bases, ns)<br>
Record = namedtuple('Record', fields)<br></blockquote><div><br></div><div>I'm not enthusiastic about cleaning it up. It feels appropriately awkward. I don't want my colleagues having too easy a time dynamically creating types or functions.</div><div><br></div><div>You brought up decorators as an example, but I think that was more about how decorators tend to be used essentially as part of the function definition. They might dramatically alter the behavior of the function and yet appear as an afterthought without the decorator syntax. From the PEP 318, "This becomes less readable with longer [functions]". The motivation said nothing about avoiding typing the function name twice.</div></div></div>