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 相关文章推荐
java直接调用python脚本的例子
Feb 16 Python
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Python读写docx文件的方法
May 08 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
python Pandas如何对数据集随机抽样
Jul 29 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
python在地图上画比例的实例详解
Nov 13 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 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
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
js 覆盖和重载 函数
2009/09/25 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
Vue组件开发初探
2017/02/14 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
Python里隐藏的“禅”
2014/06/16 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
python中reload(module)的用法示例详解
2017/09/15 Python
使用Python写一个小游戏
2018/04/02 Python
pymysql 开启调试模式的实现
2019/09/24 Python
python字典key不能是可以是啥类型
2020/08/04 Python
Linux常见面试题
2016/10/04 面试题
高中生的自我评价
2014/03/04 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
公关活动策划方案
2014/05/25 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
批评与自我批评总结
2014/10/17 职场文书
先进班组事迹材料
2014/12/25 职场文书
户外活动总结
2015/02/04 职场文书
外贸采购员岗位职责
2015/04/03 职场文书