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解析html开发库pyquery使用方法
Feb 07 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
Jul 18 Python
Python 爬虫学习笔记之单线程爬虫
Sep 21 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
Python 分享10个PyCharm技巧
Jul 13 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
python输出pdf文档的实例
Feb 13 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
Python如何输出警告信息
Jul 30 Python
Python实现列表拼接和去重的三种方式
Jul 02 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 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数组函数
2008/08/18 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
taro开发微信小程序的实践
2019/05/21 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
让python在hadoop上跑起来
2016/01/27 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
python 检测图片是否有马赛克
2020/12/01 Python
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
舞蹈教师自荐信
2014/01/27 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
python 实现定时任务的四种方式
2021/04/01 Python