Luc*_*iel 4 python iteration list-comprehension generator
我正在写一个生成器函数.我想知道是否有一个更好的(阅读:更多pythonic,理想情况下具有列表理解)方式来实现这样的事情:
generator = gen()
captures = []
for _ in xrange(x):
foo = next(generator)
directories.append(foo['name'])
yield foo
Run Code Online (Sandbox Code Playgroud)
这里的关键是我不想捕获整个产量 - 返回的字典gen()
很大,这就是我使用生成器的原因.不过,我确实需要捕捉所有'名字'.我觉得有一种方法可以通过列表理解来实现这一点,但我只是没有看到它.思考?
有另一种/更短的方法可以做到这一点,但我不会称之为Pythonic:
generator = gen()
directories = []
generator_wrapper = (directories.append(foo['name']) or foo
for foo in generator)
Run Code Online (Sandbox Code Playgroud)
这利用了这样的事实append
,就像Python中的所有变异方法一样,它总是返回,None
所以.append(...) or foo
总是会求值foo
.
这样整个字典仍然是生成器表达式的结果,并且您仍然得到延迟评估,但名称仍然保存到directories
列表中.
您还可以在显式for
循环中使用此方法:
for foo in generator:
yield directories.append(foo['name']) or foo
Run Code Online (Sandbox Code Playgroud)
或者甚至只是简化你的循环:
for foo in generator:
directories.append(foo['name'])
yield foo
Run Code Online (Sandbox Code Playgroud)
因为没有理由使用xrange
just来迭代生成器(除非你实际上只想迭代一些已知数量的步骤).