Python 有一种优雅的方式自动生成计数器变量for
循环:enumerate
功能。这节省了初始化和递增计数器变量的需要。计数器变量也很丑陋,因为一旦循环完成它们通常就没用了,但它们的作用域不是循环的作用域,因此它们不需要占用命名空间(尽管我不确定是否enumerate
实际上解决了这个问题)。
我的问题是,是否有类似的Pythonic解决方案while
loops. enumerate
不会为while
循环自enumerate
返回一个迭代器。理想情况下,解决方案应该是“Pythonic”并且不需要函数定义。
例如:
x=0
c=0
while x<10:
x=int(raw_input())
print x,c
c+=1
在这种情况下,我们希望避免初始化和递增c
.
澄清:
这可以通过无穷无尽的方式来完成for
正如一些人所建议的那样,使用手动终止循环,但我正在寻找一种使代码更清晰的解决方案,并且我不认为该解决方案在这种情况下使代码更清晰。
对伊格纳西奥答案的改进(我想说的是可读性):
x = 0
for c in itertools.takewhile(lambda c: x < 10, itertools.count()):
x = int(raw_input())
print x, c
优点:
- 只有 while 循环条件位于循环头中,而不是副作用 raw_input。
- 循环条件可以取决于普通 while 循环可能出现的任何条件。没有必要将引用的变量“导入”到 takewhile 中,因为它们已经在 lambda 作用域中可见。此外,如果您愿意,它可以取决于计数,但在本例中不是。
- 简化:枚举根本不再出现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)