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使用multiprocessing创建进程的方法
Jun 04 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
python topk()函数求最大和最小值实例
Apr 02 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
Python 可视化神器Plotly详解
Dec 26 Python
Python turtle实现贪吃蛇游戏
Jun 18 Python
python中urllib包的网络请求教程
Apr 19 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
php xml实例 留言本
2009/03/20 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
Vue基础配置讲解
2019/11/29 Javascript
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
python实现图片转字符小工具
2019/04/30 Python
python写入文件自动换行问题的方法
2019/07/05 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
使用Python发现隐藏的wifi
2020/03/04 Python
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
美国在线宠物商店:Chewy
2019/01/12 全球购物
护士长竞聘演讲稿
2014/04/30 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
委托书格式范文
2015/01/28 职场文书
交通事故案件代理词
2015/05/23 职场文书
亮剑观后感
2015/06/05 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python