python模块 - functools模块

http://blog.csdn.net/pipisorry/article/details/26863141

functools模块介绍

functools用于高阶函数:指那些作用于函数或者返回其他函数的函数。通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标。(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.)

偏函数-functools.partial()

functools.partial(func[,*args][, **keywords])

partial是针对函数起作用的,并且是部分的;而装饰器是对函数进行包装,算是对函数的整体进行处理(其实是对输入和输出)。部分的话其实只有对参数进行部分处理了。

函数的大致意思就是提前给函数绑定几个参数。即functools.partial的作用是把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

使用示例

示例1:

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

def get(self, request, *args, **kwargs):
    context = {
        'ua_filter': functools.partial(get_useragent, **{"request": request})
    }
    self.render('index.html', context)

/* 对应的大致页面代码如下 */
user-agent: {% ua_filter %}

示例2:

[解决闭包的后期绑定问题]

示例3:

在tensorflow.map_fn对data中每条数据处理时,arg_value是个值,data是数据流,这时使用偏函数解决其它参数如arg问题。

def logit2labels(data, arg):
    ...

在tensorflow.map_fn(partial(python_func, arg=arg_value), data)

示例3.1:

def cal(x, arg1, args2):
    try:

        x[old_col] = args1...args2...x[old_col]

    except:

        print("x[old_col]:", x[old_col])

df.loc[:, new_col] = df.apply(functools.partial(cal, args1=args1, args2=args2), axis=1)

示例4:

def say(name, age):
    print(name, age)

func = functools.partial(say, age=5)
func('the5fire')

# 结果是: the5fire 5

from:http://blog.csdn.net/pipisorry/article/details/26863141

ref:python中functools宝库下的partial

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值