写点什么

测开之函数进阶· 第 5 篇《偏函数》

用户头像
清菡
关注
发布于: 2020 年 12 月 30 日
测开之函数进阶· 第5篇《偏函数》

什么是偏函数


偏函数在functools的模块里有个partial,这个东西就叫做偏函数。


怎么用偏函数?


当函数的参数个数太多,需要简化时,使用 functools.partial 可以创建一个新的函数,这个新函数可固定住原函数的部分参数,从而在调用时更简单。


偏函数可以帮我们固定参数,简化参数调用的流程。如果当前有个接口,去调用这个接口的时候,这个接口需要传 50 个参数,你发现前面 49 个参数都是一样的不会变化的,这 49 个参数设置成必须要传的参数,只有一个变化的参数,调用的时候非常不方便。


偏函数可以将前面 49 个参数固定住,再次调用的时候只需要传一个参数(只需传那个变化的参数)。


之前学到的内置函数中filter中,调用的时候需要传入 2 个参数,第一个是函数,第二个是需要过滤的可迭代类型的数据。


# 可以通过传入不同的过滤条件去过滤出来我们需要的数据
filter(lambda x:x>3,li)filter(lambda x:x>5,li)
复制代码


用偏函数,代码可以这样写:


from functools import partial
# 过滤掉小于5的数据,大于5的数据全部保留下来了
li1 = [1, 2, 3, 11, 22, 33]li2 = [1, 2, 3, 11, 22, 33]li3 = [1, 2, 3, 11, 22, 33]li4 = [1, 2, 3, 11, 22, 33]li5 = [1, 2, 3, 11, 22, 33]li6 = [1, 2, 3, 11, 22, 33]li7 = [1, 2, 3, 11, 22, 33]

# 之前的写法
# filter(lambda x:x>5,li)# filter(lambda x:x>5,li2)# filter(lambda x:x>5,li3)# filter(lambda x:x>5,li4)
#那么这个时候每次都要传入同样的参数,比较麻烦。
#通过偏函数创建一个新函数,提前传入原函数所需要的参数,调用的时候更简单。
li = [1, 2, 122, 331, 11, 22, 33, 4, 6, 7, 2, 88, 31]filter2 = partial(filter, lambda x: x > 5)res=filter2(li)print(list(res))res2=filter2(li2)print(list(res2))
复制代码


functools的源码:



它的意思是不定行参数(随便多少参数都可以)。



  • 郑重声明:公众号“清菡软件测试”首发,更多原创文章:清菡软件测试 114+原创文章,欢迎关注、交流,禁止第三方未经同意擅自转载。


热文精选



发布于: 2020 年 12 月 30 日阅读数: 22
用户头像

清菡

关注

公众号《清菡软件测试》作者,热爱技术。 2019.10.29 加入

热爱技术,喜欢英语。

评论

发布
暂无评论
测开之函数进阶· 第5篇《偏函数》