Day11——递归函数/模块/迭代器/生成器
2019-01-07 本文已影响0人
Devil灬
一、递归函数
第一步:确定临界值 - 循环结束的条件,在临界值的地方要让函数结束!
第二步:找关系 - 找当次循环和上次循环的关系;找f(n)和f(n-1)的关系
第三步: 假设函数f的功能已经实现,通过f(n-1)来实现f(n)的功能
实现:1+2+3+...+n
def gx_sum(n):
# 1.找临界值
if n == 1:
return 1
# 2. 找关系
return gx_sum(n - 1) + n
print(gx_sum(5))
求斐波那契数列第n个数
def sequence(n):
# 1. 找临界值
if n == 1 or n == 2:
return 1
# 2. f(n) = f(n-1)+f(n-2)
return sequence(n-1)+sequence(n-2)
print(sequence(5))
二、模块
导入格式 | 调用格式 | 使用范围 |
---|---|---|
import 模块名 | 模块名.变量 | 所有的全局变量(包含了变量、函数和类) |
from 模块名 import 变量1, 变量2... | 直接使用变量 | 只能使用import后面的变量 |
-
阻止模块中的内容被其他模块执行
if name == 'main' -
重命名:
import 模块名 as 新模块名
from 模块名 import 变量名1 as 新变量名1, 变量名2, 变量名3 as 新变量名3...
三、迭代器
迭代器作为容器,里面的元素只能通过其他序列转换,或者通过生成器生成
迭代器中的元素可以是任何类型的数据
-
格式:
iter(序列) -
获取元素:
next(迭代器) -> 获取迭代器中最新的数据(最顶层)
for 变量 in 迭代器:
四、生成器
生成器就是迭代器, 迭代器不一定是生成器
调用一个带有yield关键字的函数就能得到一个生成器,调用的时候不会执行函数体,也不会获取返回值,而是产生一个生成器(函数调用表达式就是一个生成器), 这个生成器中的元素就是yield关键字后面的值
生成式:
格式:
生成器 = (表达式 for 变量 in 序列)
生成器 = (表达式 for 变量 in 序列 if 条件语句)
含义:
让变量去序列中取值,每取一个值就将对应的表达式的值作为生成器的元素
示例:
交换字典的key和value的位置
dict1 = {'a': 1, 'b': 2, 'c': 3}
result = dict((x, y) for y, x in dict1.items())
print(result)