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的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
python如何生成各种随机分布图
Aug 27 Python
python生成带有表格的图片实例
Feb 03 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
python全栈知识点总结
Jul 01 Python
Python 导入文件过程图解
Oct 15 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 Python
利用python进行文件操作
Dec 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
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
对比分析json及XML
2014/11/28 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
Python中的类与对象之描述符详解
2015/03/27 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
python中的decorator的作用详解
2018/07/26 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python能开发游戏吗
2020/06/11 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
初中生学习的自我评价
2013/11/14 职场文书
团日活动策划书
2014/02/01 职场文书
低碳环保演讲稿
2014/08/28 职场文书
门市房租房协议书
2014/12/04 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python