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

  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. 使用MeshLab的技巧总结(自己原创总结)

    1.放大点的显示,Alt+wheel,即按住Alt键后使用鼠标滑轮改变点的显示大小.

  2. jdbcTemplate简单使用

    package com.bizvane.spider.tools; import org.apache.commons.dbcp.BasicDataSource; import org.springf ...

  3. ]Linq to EF 增删改查

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  4. 初识Kotlin之集合

    Kotlin的集合是让我为之心动的地方,丰富的高阶函数帮助我们高效开发.今天介绍Kotlin的基础集合用法.获取集合元素的函数.过滤元素的函数.元素排序的函数.元素统计的函数.集合元素映射的函数.集合 ...

  5. jmeter+ant+jenkins实现自动化接口测试

    一.安装前准备 1.JDK:jdk-8u121-windows-x64 2.jmeter工具:apache-jmeter-2.13 3.ANT工具:apache-ant-1.9.7-bin 4.jen ...

  6. OVN简单部署

    部署OVN实验环境 网络拓扑 ### Central节点 # cat ifcfg-eth0 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=ye ...

  7. OVS编译

    下载源码 # git clone https://github.com/openvswitch/ovs.git # cd ovs # git checkout branch-2.8 下载依赖包 # y ...

  8. GDB 远程调试Linux (CentOS)

    1.引用: https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-development/ 注意安装gdbserv ...

  9. SpringMVC入门 bug集锦X2

    package cn.itcast.converter; import org.springframework.core.convert.converter.Converter; import jav ...

  10. jQuery解决ajax请求的跨域问题

    这两天工作中频繁的遇到JS的跨域问题,都通过绕开ajax请求的方式.特地百度了一下,把跨域问题解决了.在这分析一下 首先贴上js的页面代码: <html> <head> < ...