单行迭代
我有一些代码,格式是这样的:
for i in range(nIterations):
y = f(y)
这里的 f
是在别的地方定义的一个函数。希望这个代码的意思是,运行完之后,y
会被 f
这个函数应用 nIterations
次。
有没有办法在 Python 里把这个写成一行代码呢?
11 个回答
0
就把所有代码写在一行,像这样:for i in range(nIterations): y = f(y)
关于代码是写在一行还是多行,这个争论已经有很多年了——其实这样写并不会提高性能。你可以根据自己的喜好来排版,最重要的是让你自己能看得懂。
3
你是这个意思吗?
for i in range(nIterations): y = f(y)
虽然这样看起来很不错,也很美观,但我想说(正如你帖子下面的评论所提到的)这并没有提高可读性,最好还是保持成两行。
6
像这样吗?
for i in range(nIterations): y = f(y)
一个只有一条命令的for循环可以写成一行。
编辑
或者可以稍微更简洁一点:
for _ in xrange(nIterations): y = f(y)
因为你可能不想把它拆分成两个独立的语句(我觉得),这里还有另一个写法:
reduce(lambda y, _: f(y), xrange(nIterations), initValue)
不过,我还是建议直接使用你原来的代码,这样更直观也更容易阅读。还有,注意一下Guido van Rossum对循环和repeat
的看法。
顺便提一下,在python 2.x中,xrange
在处理大量迭代时比range
更高效,因为它返回的是一个实际的迭代器,而不是一个分配好的列表。