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)
因为没有理由使用xrangejust来迭代生成器(除非你实际上只想迭代一些已知数量的步骤).
| 归档时间: |
|
| 查看次数: |
2720 次 |
| 最近记录: |