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通过90行代码搭建一个音乐搜索工具
Jul 29 Python
python监控文件或目录变化
Jun 07 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
python 追踪except信息方式
Apr 25 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
什么是python的函数体
Jun 19 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
python如何使用代码运行助手
Jul 03 Python
python元组打包和解包过程详解
Aug 02 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中防止SQL注入的最佳解决方法
2013/04/25 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
PHP实现的日历功能示例
2018/09/01 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
node.js实现端口转发
2016/04/14 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
python和ruby,我选谁?
2017/09/13 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
python实现zabbix发送短信脚本
2018/09/17 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
人力资源部经理助理岗位职责
2014/03/04 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
2015年采购员工作总结
2015/04/27 职场文书
导游词之天津古文化街
2019/11/09 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
python自动计算图像数据集的RGB均值
2021/06/18 Python