前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 中 functools 宝库下的 partial

python 中 functools 宝库下的 partial

作者头像
the5fire
发布2019-03-01 09:53:13
3580
发布2019-03-01 09:53:13
举报

看起来好久没更新,再不更新估计手都生锈了。随便写点什么。看看日历,也算是新年第一篇。

说说Python中的一个宝库functools中的一个函数——partial。

partial ,单词的意思是“局部的,部分的”。单看这个词可能有些模糊,但是加上前面的functools,会不会有些明白?那个穿白衣服的同学,你来回答。你说不知道?

先来看下functools的定义:

代码语言:javascript
复制
The functools module is for higher-order functions: functions that act on or return other functions. In general, any callable object can be treated as a function for the purposes of this module.

中文大意是:

代码语言:javascript
复制
functools这货用于高阶函数:指那些作用于函数或者返回其他函数的函数。通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标。

Note

在python中都有那些东西可以被当做函数来调用呢?

有了上面的定义,应该大体知道, partial 这个东西是针对函数起作用的,并且是部分的,函数中哪些东西可以拆成部分呢?那个白衣服的同学。【小白:类似于装饰器吗。博主:你出去。】

好了,咱们继续,装饰器是对函数进行包装,算是对函数的整体进行处理(其实是对输入和输出)。部分的话其实只有对参数进行部分处理了。怎么部分处理的呢?看个场景就明白了。

场景:有这样的函数:get_useragent(request) 用来获取用户浏览器的ua信息,但是这个函数又不是在主体函数(执行页面渲染的函数)get时调用的,只在模板中的一个filter中调用的(可以理解是在模板渲染时调用的),而filter在执行的时候是不能添加参数的,哪你要怎么处理。

这时partial就得闪亮登场了,代码时间到:

代码语言:javascript
复制
#省略上下文defget(self,request,*args,**kwargs):context={'ua_filter':functools.partial(get_useragent,**{"request":request})}self.render('index.html',context)
代码语言:javascript
复制
/* 对应的大致页面代码如下 */
user-agent: {% ua_filter %}

这样的例子不知道是否够清楚,函数的大致意思就是提前给函数绑定几个参数。

不考虑场景的例子是这样的:

代码语言:javascript
复制
defsay(name,age):printname,agefunc=functools.partial(say,age=5)func('the5fire')# 结果是: the5fire 5

就这样,随便写篇,以示存在。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-01-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档