偏函数

本文整理自慕课网廖学峰老师的python视频教程

当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。
比如,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可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,这样,新函数调用的难度就降低了。

practice

python进阶之自定义排序中我们在sorted这个高阶函数中传入自定义排序函数就可以实现忽略大小写排序。请用functools.partial把这个复杂调用变成一个简单的函数:

sorted_ignore_case(iterable)

解答
要固定sorted()cmp参数,需要传入一个排序函数作为cmp的默认值。

from filecmp import cmp
import functools
# sorted_ignore_case = functools.partial(sorted, cmp=lambda s1, s2: cmp(s1.upper(), s2.upper()))   python2 的写法
sorted_ignore_case = functools.partial(sorted, key=lambda a:a.upper())
print (sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit']))

Python进阶之偏函数相关推荐

  1. python进阶20装饰器

    原创博客地址:python进阶20装饰器 Nested functions Python允许创建嵌套函数,这意味着我们可以在函数内声明函数并且所有的作用域和声明周期规则也同样适用. 1 2 3 4 5 ...

  2. Python进阶小技巧2

    Python进阶小技巧 上一篇进阶小技巧阅读量尚可,给了我再写一篇的动力.这回讲一下:偏函数.强制关键字参数和字典相关的技巧. 1. 偏函数 使用偏函数之前,首先要回答2个问题:什么是偏函数?偏函数有 ...

  3. Python进阶之递归函数的用法及其示例

    作者 | 程序员adny 责编 | 徐威龙 封图| CSDN│下载于视觉中国 出品 |  AI科技大本营(ID:rgznai100) 本篇文章主要介绍了Python进阶之递归函数的用法及其示例,现在分 ...

  4. Python自学路线图之Python进阶

    Python自学路线图的第二个阶段是Python进阶学习,自学完后需要掌握的Python技能: 1.自学Linux操作系统,熟练使用Linux操作系统: 自学网络编程,掌握网络编程相关技术, 能够实现 ...

  5. 如果只推荐一本 Python 进阶的书,我要 Pick 它!

    作者 | 豌豆花下猫 今年二月初,我偶然看到了一条推特: <流畅的Python>一书的作者发布了一条激动人心的消息:他正在写作第二版! 如果要票选最佳的 Python 进阶类书目,这本书肯 ...

  6. 106页的《Python进阶》中文版(附下载)!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送 推荐一本对Python感兴趣的书籍<Python进阶>,是<Inter ...

  7. Python进阶6——序列操作

    1.序列的拼接和复制 Python中使用+对序列进行拼接,使用*对序列进行复制 s=str(1234) l=list(range(2,13)) print(s,l) print('---------- ...

  8. Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)

    前言 大家好,今天想和大家分享一下我的itertools学习体验及心得,itertools是一个Python的自带库,内含多种非常实用的方法,我简单学习了一下,发现可以大大提升工作效率,在sf社区内没 ...

  9. Python 进阶_生成器 生成器表达式

    目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & ...

最新文章

  1. py3Dmol 简介、安装与入门
  2. SpringBoot集成OpenOffice实现doc文档转html
  3. 系统升级后找不到网络计算机,Windows10系统局域网中共享计算机找不到怎么办
  4. 网络视频监控与人脸识别
  5. 三星android rom开发者,六年老机吃上奥利奥:第三方三星S2安卓8.0刷机包发布
  6. python执行命令并返回结果集_如何执行python脚本然后将结果存储为Power BI中的pandas数据集?...
  7. 高效的JSON处理_ Jackson
  8. 未来的创业者和公司,一定要具备三大能力
  9. php js后端渲染,webpack后端渲染详解
  10. 【Keras】使用数据生成器(data generators)解决训练数据内存问题
  11. 查看mysql服务器位置,查看mysql服务器ip地址
  12. 开源加速器Gemmini代码解析(一):脉动阵列
  13. Acwing 187. 导弹防御系统
  14. 通过X11转发在服务器上用IGV
  15. 功不唐捐—— 程序员职场第一课 后记
  16. codeforces1359C Mixing Water
  17. 浅谈中国电信出口网络的链路情况(什么是 ChinaNet,CN2,GT,GIA)
  18. linux麒麟v10专有机关闭防火墙或开放端口的解决办法
  19. C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
  20. 【19考研】计算机/软件等专业调剂信息集合!【完结版】

热门文章

  1. 构建制品不一致,后续工作都是白费
  2. 后续工作计划以及现在进度报告
  3. HDU-寒冰王座(多重背包)
  4. linux用户删除附加组,Linux用户组之主组和附加组
  5. 计算机如何添加usb平板电脑,平板电脑怎么连接电脑 最有效方法【图解】
  6. ccf 智能运维 裴丹_裴丹:智能运维算法需要工业界
  7. WebRTC(M66-M88)关键更新说明
  8. ARM 之二 Keil 项目/生成的各种文件类型(.AXF、.D、.crf、.exf)说明
  9. OPPO和vivo在印度市场取得复苏
  10. 验证只能输入数字——正则表达式