单行迭代

0 投票
11 回答
5860 浏览
提问于 2025-04-15 16:47

我有一些代码,格式是这样的:

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更高效,因为它返回的是一个实际的迭代器,而不是一个分配好的列表。

撰写回答