博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】学习笔记——-5.5、偏函数
阅读量:4102 次
发布时间:2019-05-25

本文共 1373 字,大约阅读时间需要 4 分钟。

Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。要注意,这里的偏函数和数学意义上的偏函数不一样。

在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。举例如下:

int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换:

>>> int('12345')12345

int()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做N进制的转换:

>>> int('12345', base=8)5349>>> int('12345', 16)74565

假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去:

def int2(x, base=2):    return int(x, base)

这样,我们转换二进制就非常方便了:

>>> int2('1000000')64>>> int2('1010101')85

functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2

>>> import functools>>> int2 = functools.partial(int, base=2)>>> int2('1000000')64>>> int2('1010101')85

所以,简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

注意到上面的新的int2函数,仅仅是把base参数重新设定默认值为2,但也可以在函数调用时传入其他值:

>>> int2('1000000', base=10)1000000

最后,创建偏函数时,实际上可以接收函数对象、*args**kw这3个参数,当传入:

int2 = functools.partial(int, base=2)

实际上固定了int()函数的关键字参数base,也就是:

int2('10010')

相当于:

kw = { 'base': 2 }int('10010', **kw)

当传入:

max2 = functools.partial(max, 10)

实际上会把10作为*args的一部分自动加到左边,也就是:

max2(5, 6, 7)

相当于:

args = (10, 5, 6, 7)max(*args)

结果为10

小结

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

源代码:

  - * - coding:utf-8 - * -
   
  import functools
   
  int2 = functools.partial(intbase = 2
   
  print' 1000000 = ',int2(' 1000000 '))
  print' 1010101 = ',int2(' 1010101 '))

转载地址:http://uwysi.baihongyu.com/

你可能感兴趣的文章
在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
查看>>
物联网】共享单车技术含量,一篇文章全说透了!
查看>>
在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
查看>>
在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
查看>>
在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务
查看>>
在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务
查看>>
Android硬件抽象层(HAL)概要介绍和学习计划
查看>>
Android项目中最火最常用的优秀开源项目
查看>>
git 关于分支,关于远程分支,关于push pull 的时机
查看>>
一种较方便在Android中添加开机自启动的守护进程的方法
查看>>
android4.0 上定制状态栏
查看>>
Android全屏 去除标题栏和状态栏
查看>>
有效获取状态栏(StatusBar)高度
查看>>
Ubuntu下用eclipse进行源码开发注意事项
查看>>
浅析android UI 定制
查看>>
Android statusBar添加back,home,menu按钮 .
查看>>
android怎么修改状态栏集锦
查看>>
Android基础教程之---Android状态栏提醒(Notification,NotificationManager)的使用! .
查看>>
【Android】状态栏通知Notification、NotificationManager详解
查看>>
如何在Android 4.0 ICS中禁用StatusBar | SystemBar | 状态栏
查看>>