def _peval_comprehension_generators(state, generators, ctx):
if len(generators) == 0:
return state, []
generator = generators[0]
next_generators = generators[1:]
state, iter_result = _peval_expression(state, generator.iter, ctx)
masked_bindings = _get_masked_bindings(generator.target, ctx.bindings)
masked_ctx = ctx.set('bindings', masked_bindings)
state, ifs_result = _peval_comprehension_ifs(state, generator.ifs, masked_ctx)
if is_known_value(ifs_result):
success, bool_value = try_call(bool, args=(ifs_result.value,))
if success and bool_value:
ifs_result = []
state, new_generator_kwds = map_reify(
state, dict(target=generator.target, iter=iter_result, ifs=ifs_result))
new_generator = ast.comprehension(**new_generator_kwds)
state, new_generators = _peval_comprehension_generators(state, next_generators, ctx)
return state, [new_generator] + new_generators
评论列表
文章目录