# -*- coding: utf-8 -*- """ Created on Sun Mar 24 21:54:53 2019 @author: fengs """ """ 测试题(笔试,不能上机哦~): 0. 通常,一般的函数从第一行代码开始执行,并在什么情况下结束? return 、异常 1. 什么是协同程序? 可以运行的独立函数调用,函数可以暂停,挂起,在需要的时候从程序离开的地方继续或者重新开始 2. 生成器所能实现的任何操作都可以由迭代器来代替吗,为什么? 可以,生成器是一种特殊的迭代器 3. 将一个函数改造为生成器,说白了就是把什么语句改为 yield 语句? return 4. 说到底,生成器的最大作用是什么? 保存上一次迭代计算的环境,让下一次生成迭代的条件从上一次的结果开始 5. 如下,get_prime() 是一个获得素数的生成器,请问第 2 行代码 while True 有何作用? def get_primes(number): while True: if is_prime(number): yield number number += 1 保证生成器下次被调用时遇到的是新的yield,保证该生成器不结束,只要调用next烦烦噶就有值 """ """ 0. 要求实现一个功能与 reversed() 相同(内置函数 reversed(seq) 是返回一个迭代器,是序列 seq 的逆序显示)的生成器。 """ def myRev(str_value): while True: if str_value !="": yield str_value[-1] str_value = str_value[:-1:] else: break for i in myRev("FishC"): print(i, end='') """ 1. 10 以内的素数之和是:2 + 3 + 5 + 7 = 17,那么请编写程序,计算 2000000 以内的素数之和? """ def isPrime(number): if number <= 1: return False i = 2 while i*i <= number: if number % i == 0: return False i += 1 return True print(' ') print(sum( x for x in range(2000000) if isPrime(x) == True )) """ def fabs(): fn0 = 0 fn1 = 1 while True: fn0,fn1 = fn1,fn0+fn1 yield fn0 for i in fabs(): print(i) if i > 100: break e = ( i for i in range(10)) #括号就是生成器推导式 print(next(e)) """ #print(sum( i for i in range(101)))