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登录Dr.com思路以及代码分享
Jun 25 Python
Python单链表的简单实现方法
Sep 23 Python
python检查序列seq是否含有aset中项的方法
Jun 30 Python
Python 通过URL打开图片实例详解
Jun 01 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
Jun 14 Python
Python正则表达式常用函数总结
Jun 24 Python
Python设计模式之工厂方法模式实例详解
Jan 18 Python
python+mysql实现学生信息查询系统
Feb 21 Python
Python PO设计模式的具体使用
Aug 16 Python
树莓派3 搭建 django 服务器的实例
Aug 29 Python
wxPython电子表格功能wx.grid实例教程
Nov 19 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 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 array_multisort()函数的使用札记
2011/07/03 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
基于js disabled=&quot;false&quot;不起作用的解决办法
2013/06/26 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
js实现购物车功能
2018/06/12 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
详解React 元素渲染
2020/07/07 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
python 容器总结整理
2017/04/04 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
对python3新增的byte类型详解
2018/12/04 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
Python @property及getter setter原理详解
2020/03/31 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
教师教学评估方案
2014/05/09 职场文书
青年联谊会致辞
2015/07/31 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python