测试开发进阶(三)
生成器的三个方法
send()和生成器内部进行数据交互
close()关闭生成器
1 | gen = (i for i in range(0, 20, 2)) |
- throw()触发异常
1 | gen = (i for i in range(0, 20, 2)) |
函数
递归函数
在函数中调用函数自身,我们把这种函数叫做递归函数
递归边界:递归的终止条件
1 | def func(n): |
实现一个累加函数
- 6累加的结果 6+5+4+3+2+1
- 10累加的结果 10+9+8+7+6+5+4+3+2+1
1 | 1 1 |
1 | def fun_add(n): |
查看最大递归次数
1 | import sys |
使用装饰器缓存调用
调用同样的参数后,使用缓存,不会重新开辟空间
https://docs.python.org/zh-cn/3/library/functools.html
@functools.lru_cache(maxsize=128, typed=False)
一个为函数提供缓存功能的装饰器,缓存 maxsize 组传入参数,在下次以相同参数调用时直接返回上一次的结果。用以节约高开销或I/O函数的调用时间。
由于使用了字典存储缓存,所以该函数的固定参数和关键字参数必须是可哈希的。
一个题目:
爬100个台阶,爬台阶每一步可以上一阶,两阶,或三阶,请问一共有多少种爬法
1 | from functools import lru_cache |
纯函数
一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用
变量都只在函数作用域内获取
不会产生
副作用(side effects)
,不会改变被传入的数据或其他数据(全局变量)函数的副作用:
相同的输入保证相同的输出
1 | def func(a, b): |
内置函数
- map
1 | li = [1, 2, 3, 4, 5, 6, 7] # 每个元素*1000/2 |
- filter 过滤器
1 | def func1(n): |
- zip 聚合打包
长度不一样,以最短为准
1 | title = ['name', 'age', 'gender'] |
匿名函数
关键字:lambda
1 | lambda 参数:表达式(返回值) |
1 | res = (lambda n: n * 2)(4) |
偏函数
1 | # 偏函数之前的写法 |
1 | from functools import partial |
一个简单的例子:
1 | from functools import partial |