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 相关文章推荐
在Gnumeric下使用Python脚本操作表格的教程
Apr 14 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
Apr 24 Python
Python中关于使用模块的基础知识
May 24 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
Python中pillow知识点学习
Apr 30 Python
python调用java的jar包方法
Dec 15 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
django自带调试服务器的使用详解
Aug 29 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
Win10环境中如何实现python2和python3并存
Jul 20 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 使用post,get的一种简洁方式
2010/04/25 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
Destoon模板制作简明教程
2014/06/20 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
父亲生日宴会答谢词
2014/01/10 职场文书
廉洁使者实施方案
2014/03/29 职场文书
土地转让协议书范本
2014/04/15 职场文书
博物馆观后感
2015/06/05 职场文书
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL