[Python-ideas] Generator syntax hooks?

Soni L. fakedme+py at gmail.com
Thu Aug 10 11:39:34 EDT 2017



On 2017-08-10 01:43 AM, Nick Coghlan wrote:
> On 10 August 2017 at 01:49, Soni L. <fakedme+py at gmail.com> wrote:
>> On 2017-08-09 11:54 AM, Nick Coghlan wrote:
>>> Right, I was separating the original request to make "{x for x in
>>> integers if 1000 <= x < 1000000}" work into the concrete proposal to
>>> make exactly *that* syntax work (which I don't think is feasible), and
>>> the slightly more general notion of offering a more math-like syntax
>>> that allows finite sets to be built from infinite iterators by
>>> defining a termination condition in addition to a filter condition.
>> Ok. A concrete proposal would give a read-only 'filter' argument to the
>> iterator somehow, which represents some form of simplified AST of the
>> condition.
>>
>> So e.g. {x for x in integers if (lambda v: 1000 <= v < 1000000)(x)} would
>> never complete, but {x for x in integers if 1000 <= x < 1000000} would. (But
>> perhaps lambda objects should include an AST attribute... Having it for
>> normal functions would introduce too much overhead tho, and then it would no
>> longer be a simplified AST, but rather a complete python AST, which we don't
>> want.)
> There have been a variety of different "thunking" proposals over the
> years, but they've all foundered on the question of what the
> *primitive* quoted form should look like, and how the thunks should
> subsequently be executed.
>
> For cases like this, where integration with Python's name resolution
> mechanism isn't actually required, folks have ended up just using
> strings, where the only downside is the fact that syntax highlighters
> and other static analysers don't know that the contents are supposed
> to be valid Python code. In a case like this, that might look like:
>
>      {x for x in integers.build_set("1000 <= x < 1000000")}
>
> As with regexes, the cost of dynamically parsing such strings can then
> be amortised at runtime through the use of an appropriate caching
> strategy.

I'm pretty sure I read somewhere that lambdas and generators share their 
syntax, and that syntax is already a subset of python syntax. Would it 
be too hard to expose that with a "simplified AST" API?

>
> Cheers,
> Nick.
>



More information about the Python-ideas mailing list