测试开发---函数

(1)递归函数:调用自身

import sys
sys.setrecursionlimit(5000) # 修改递归最大次数,默认1000次
# 特点:消耗内存严重

(2)纯函数:返回值只由传入参数决定

I.纯函数的3个原则

  • 变量都只在函数作用域内获取,作为函数的参数传入

  • 不会产生副作用(side effects),不会改变被传入的数据或其他数据(全局变量)

  • 相同的输入保证相同的输出

(3)匿名函数:lambda 变量名:表达式

使用场景:简单的函数定义(只有一个表达式)

def fun(a,b):
    return a+b

# 定义
func = lambda a,b:a+b
# 调用
res = func(11,22) # 33
print(res)

# 即定义即调用
(lambda a,b:a+b)(11,22)

# 快速过滤
li = [1,2,122,132,11,22,12,33,4,65,7]
res1 = filter(lambda x:x<10,li)
print(list(res1)) # [1, 2, 4, 7]

# 三步运算符
a =100
print(100) if a>100 else print(22)

(4)内置函数

  • map函数:会根据提供的函数对指定序列做映射(将可迭代对象中的数据迭代出来,一个一个传入到函数中去调用,将返回结果放到新的对象中)

  • filter函数:用于过滤序列(将可迭代对象中的数据迭代出来,一个一个传入到函数中,过滤掉不符合要求的数据,将返回结果放到新的对象中)

  • zip函数:用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组(要求元素的长度一致)

(5)偏函数

from functools import partial # 偏函数

# 过滤掉小于5的数据
nfilter = partial(filter,lambda x:x>5)

li1 = [1,2,3,11,22,33,4,5,6,7,2,88,31,23,122,331]
res1 = nfilter(li1)
print(list(res1)) # [11, 22, 33, 6, 7, 88, 31, 23, 122, 331]

li2 = [1,2,3,11,22,33]
res2 = nfilter(li2)
print(list(res2)) # [11, 22, 33]

(6)闭包(实现数据的锁定,提高稳定性)

闭包满足的条件:函数中嵌套函数,外层函数返回内层嵌套函数名,内层嵌套函数有引用外层的一个非全局变量

a = 100
def fun(num,b):
    # num = 100
    def count_book():
        print(num)
        print(b)

        print('这是计算买书方式的函数')
    return count_book

res = fun([1,2,3],'python')

# (<cell at 0x00EFE4D8: str object at 0x01044960>, <cell at 0x00F32E20: list object at 0x00F1A8C8>)
print(res.__closure__) # 存放非全局变量

 

posted @ 2021-12-08 10:29  鲲尘轻杳  阅读(30)  评论(0编辑  收藏  举报