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 del()函数用法
Mar 24 Python
Python读写Excel文件的实例
Nov 01 Python
python线程池threadpool使用篇
Apr 27 Python
python检索特定内容的文本文件实例
Jun 05 Python
在IPython中执行Python程序文件的示例
Nov 01 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
python调用自定义函数的实例操作
Jun 26 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
python实现名片管理器的示例代码
Dec 17 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
Python连接mysql方法及常用参数
Sep 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
php Smarty 字符比较代码
2011/02/27 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
vue+node+webpack环境搭建教程
2017/11/05 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
Python变量赋值的秘密分享
2018/04/03 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
Django用户认证系统 User对象解析
2019/08/02 Python
简单的Python调度器Schedule详解
2019/08/30 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
Servlet方面面试题
2016/09/28 面试题
学生实习介绍信
2014/01/15 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
大学生求职自荐信
2015/03/24 职场文书
长征观后感
2015/06/09 职场文书
证婚人致辞精选
2015/07/28 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
处理canvas绘制图片模糊问题
2022/05/11 Javascript
nginx 添加http_stub_status_module模块
2022/05/25 Servers