Python中偏函数用法示例


Posted in Python onJune 07, 2018

本文实例讲述了Python中偏函数用法。分享给大家供大家参考,具体如下:

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可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,这样,新函数调用的难度就降低了。

任务

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

sorted_ignore_case(iterable)

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

参考代码:

#!/usr/bin/python
#coding: utf-8
import functools
# cmp = lambda s1, s2: cmp(s1.upper(), s2.upper()) 最左边一定要有cmp = , 这样执行print的时候会执行
# 匿名函数中的cmp函数,关于为什么使用cmp = ,请看上面的例子中,base = 2, 如果说没有base = 的话,结果
# 肯定会出错
# cmp函数释义:
# cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
# 用于排序中,默认从小到大
sorted_ignore_case = functools.partial(sorted, cmp = lambda s1, s2: cmp(s1.upper(), s2.upper()))
print(sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit']))
# 不使用偏函数的时候
'''
def cmp_ignore_case(s1, s2):
  u1 = s1.upper()
  u2 = s2.upper()
  if u1 > u2:
    return 1
  if u1 < u2:
    return -1
  return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
'''

运行结果:

['about', 'bob', 'Credit', 'Zoo']

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中endswith()函数的基本使用
Apr 07 Python
Python中的with语句与上下文管理器学习总结
Jun 28 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 Python
python字典快速保存于读取的方法
Mar 23 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
Nov 14 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
Django分页功能的实现代码详解
Jul 29 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
如何在django中添加日志功能
Feb 06 Python
Python3.8官网文档之类的基础语法阅读
Sep 04 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 #Python
python指定写入文件时的编码格式方法
Jun 07 #Python
Python实现的爬虫刷回复功能示例
Jun 07 #Python
异步任务队列Celery在Django中的使用方法
Jun 07 #Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 #Python
Python查看微信撤回消息代码
Jun 07 #Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 #Python
You might like
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
php empty() 检查一个变量是否为空
2011/11/10 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
详解php中 === 的使用
2016/10/24 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
JavaScript效率调优经验
2009/06/04 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
Python for循环中的陷阱详解
2018/07/13 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
python线程中的同步问题及解决方法
2019/08/29 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
深入了解NumPy 高级索引
2020/07/24 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
英国医生在线预约:Top Doctors
2019/10/30 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
毕业生的自我鉴定
2013/10/29 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
班级文化标语
2014/06/23 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
公司老总年会致辞
2015/07/30 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
Python基础知识学习之类的继承
2021/05/31 Python