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中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
python中的print()输出
Apr 12 Python
Python中IP地址处理IPy模块的方法
Aug 16 Python
python全局变量引用与修改过程解析
Jan 07 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
keras.utils.to_categorical和one hot格式解析
Jul 02 Python
python 爬虫网页登陆的简单实现
Nov 30 Python
Python中的套接字编程是什么?
Jun 21 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中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
jquery中动态效果小结
2010/12/16 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
跟老齐学Python之变量和参数
2014/10/10 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Python获取邮件地址的方法
2015/07/10 Python
python实现发送邮件功能代码
2017/12/14 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
python3 使用traceback定位异常实例
2020/03/09 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
python使用yaml 管理selenium元素的示例
2020/12/01 Python
见习期自我鉴定
2013/11/07 职场文书
大学在校生求职信范文
2013/11/21 职场文书
降消项目实施方案
2014/03/30 职场文书
2014年接待工作总结
2014/11/26 职场文书
处级干部考察材料
2014/12/24 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang