python中的for...else...

在使用python寻找质数的过程中,学习到了for...else...语句。

如果不用for...else...语句,应该这么写:

def genPrimes():
    primes = [2]
    prime = 2
    num = 2
    isPrime = True
    while True:
        if isPrime:
            yield prime
        num+=1
        primeIndex = primes[:]
        for i in primeIndex:
            if num%i == 0:
                isPrime = False
                break
            if i == primeIndex[-1]:
                isPrime = True
                prime = num
                primes.append(num)
因为primes是在for循环中改变的,所以不能用primes作为for的条件,否则在执行primes.append(num)之后,我们期望是跳出for循环,开始考察下一个数是否是质数,但因为primes增加了一个成员,所以for循环会多执行一次,而这一次isPrime被改为False,永远无法yield prime。


而用了for...else...语句之后就简单许多:

# Note that our solution makes use of the for/else clause, which 
# you can read more about here:
# http://docs.python.org/release/1.5/tut/node23.html 

def genPrimes():
    primes = []   # primes generated so far
    last = 1      # last number tried
    while True:
        last += 1
        for p in primes:
            if last % p == 0:
                break
        else:
            primes.append(last)
            yield last

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值