通过设定参数的默认值,可以降低函数调用的难度。偏函数可以做到这一点

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

>>> int('123')
123

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

>>> int('123',base=8)
83
>>> int('123',base=16)
291
>>> int('123',16)
291

  PS:base=8把字符串作为8进制转换成10进制,同理16进制 可以省略关键字base直接写8或者16

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

>>> def int2(x,base=2):
... return int(x,base=2)
...
>>> int2('11')
3

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

>>> import functools
>>> int2=functools.partial(int,base=2)
>>> int2('11')
3

  偏函数functools.partial的作用就是,把一个函数的默写参数固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单

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

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

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

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

  相当于传入是字典

kw={'base':2}

  当传入

max2=functools.partial(max,10)

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

max2(5,6,7)

  相当于

max2(10,5,6,7)

  结果为10

  

Python3之偏函数的更多相关文章

  1. Python3学习(18)--偏函数(Partial) --转载存地址

    由于最近出差,没有时间更,  倒不是忙,而是费心,项目其实并不难,主要是涉及钱的地方谈技术略显苍白:没有技术解决不了的问题,但是钱没到位,没人愿意无偿给你提供技术,算是停更一周后的,吐槽吧. 赶上今天 ...

  2. python3 第二十三章 - 函数式编程之Partial function(偏函数)

    要注意,这里的偏函数和数学意义上的偏函数不一样,偏函数是2.5版本以后引进来的东西,属于函数式编程的一部分.前面章节中我们讲到,通过设定参数的默认值,可以降低函数调用的难度.而偏函数也可以做到这一点. ...

  3. python3偏函数

    Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 通过设定参数的默认值,可以降低函数调 ...

  4. [Python3] 038 函数式编程 偏函数

    目录 函数式编程 之 偏函数 1. 关于强制类型转换 int 的补充 2. 利用 int 新建函数 3. functools.partial 函数式编程 之 偏函数 1. 关于强制类型转换 int 的 ...

  5. 慕课python3.5学习笔记

    本文章中有部分代码为python2 慕课python入门 慕课python进阶 布尔值 布尔值可以用and.or和not运算. and运算是与运算,只有所有都为 True,and运算结果才是 True ...

  6. Python3 与 C# 并发编程之~ 协程篇

      3.协程篇¶ 去年微信公众号就陆陆续续发布了,我一直以为博客也汇总同步了,这几天有朋友说一直没找到,遂发现,的确是漏了,所以补上一篇 在线预览:https://github.lesschina.c ...

  7. Python3 与 C# 扩展之~模块专栏

      代码裤子:https://github.com/lotapp/BaseCode/tree/maste 在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode ...

  8. Python3 与 C# 扩展之~基础衍生

      本文适应人群:C# or Python3 基础巩固 代码裤子: https://github.com/lotapp/BaseCode 在线编程: https://mybinder.org/v2/g ...

  9. Python3 与 C# 扩展之~基础拓展

      上次知识回顾:https://www.cnblogs.com/dotnetcrazy/p/9278573.html 代码裤子:https://github.com/lotapp/BaseCode ...

随机推荐

  1. java面试一定会遇到的56个面试题

    1.问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 2.问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传 ...

  2. gridview把textbox的值修改还是旧值的解决方法

    解决方法很简单,加上if(!IsPostBack) 就OK了,因为之前加载之前都会调用InitData(). protected void Page_Load(object sender, Event ...

  3. js 实现发布订阅模式

    /* Pubsub */ function Pubsub(){ //存放事件和对应的处理方法 this.handles = {}; } Pubsub.prototype = { //传入事件类型typ ...

  4. Spark HA 配置中spark.deploy.zookeeper.url 的意思

    Spark HA的配置网上很多,最近我在看王林的Spark的视频,要付费的.那个人牛B吹得很大,本事应该是有的,但是有本事,不一定就是好老师.一开始吹中国第一,吹着吹着就变成世界第一.就算你真的是世界 ...

  5. codeforces986F Oppa Funcan Style Remastered【线性筛+最短路】

    容易看出是用质因数凑n 首先01个因数的情况可以特判,2个的情况就是ap1+bp2=n,b=n/p2(mod p1),这里的b是最小的特解,求出来看bp2<=n则有解,否则无解 然后剩下的情况最 ...

  6. uoj#402. 【CTSC2018】混合果汁(主席树+二分)

    传送门 我们先把果汁按照美味度排序,枚举\(d\),那么肯定是贪心的选择美味程度不小于\(d\)的且最便宜的果汁 发现\(d\)可以二分,那么在主席树上二分就可以了 据说还有整体二分的大佬然而我并不会 ...

  7. 30岁程序员的焦虑 Anxiety of 30-year-old Programmers

    还有四个月,我就30周岁了.圈里都在传30岁程序员的焦虑,我也焦虑.身边的朋友,除了已经上岸的一部分,说不焦虑的,几乎找不到. 我们不妨认真地来聊一下这个话题:30岁,程序员,焦虑. 首先,什么是焦虑 ...

  8. SequoiaDB培训视频

    很久之前录制的SequoiaDB培训视频,现在都放上百度云盘了,感兴趣的同学可以看看. 第一讲:图形界面-安装前准备 链接: https://pan.baidu.com/s/1d2B3qUYqtKrE ...

  9. POJ 2411 Mondriaan's Dream 【状压Dp】 By cellur925

    题目传送门 这道题暑假做的时候太模糊了,以前的那篇题解大家就别看了==.今天再复习状压感觉自己当时在写些什么鸭.... 题目大意:给你一个\(n\)*\(m\)的棋盘和许多\(1*2\)的骨牌,骨牌可 ...

  10. GridSearchCV.grid_scores_和mean_validation_score报错

    目录 GridSearchCV.grid_scores_和mean_validation_score报错 0. 写在前面 1. 问题描述和解决过程 2. 不想比比直接看结果部分 GridSearchC ...