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判断列表是否已排序的各种方法及其性能分析
Jun 20 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
python3.5绘制随机漫步图
Aug 27 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
python给图像加上mask,并提取mask区域实例
Jan 19 Python
如何定义TensorFlow输入节点
Jan 23 Python
python3 字符串知识点学习笔记
Feb 08 Python
python scatter函数用法实例详解
Feb 11 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 Python
Python实现扫码工具的示例代码
Oct 09 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
建立动态的WML站点(三)
2006/10/09 PHP
PHP面向对象的使用教程 简单数据库连接
2006/11/25 PHP
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
Python 文件重命名工具代码
2009/07/26 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
Python使用进程Process模块管理资源
2020/03/05 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
Python二元算术运算常用方法解析
2020/09/15 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
日语专业个人的求职信
2013/12/03 职场文书
活动总结书
2014/05/08 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
教师工作表现自我评价
2015/03/05 职场文书
文明旅游倡议书
2015/04/28 职场文书
公司车辆管理制度
2015/08/04 职场文书
Python基础详解之邮件处理
2021/04/28 Python
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电
Selenium浏览器自动化如何上传文件
2022/04/06 Python