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操作csv文件实例详解
Jul 31 Python
利用python循环创建多个文件的方法
Oct 25 Python
利用python修改json文件的value方法
Dec 31 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
python里运用私有属性和方法总结
Jul 08 Python
pytorch自定义初始化权重的方法
Aug 17 Python
Django之模板层的实现代码
Sep 09 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
基于python的列表list和集合set操作
Nov 24 Python
Python列表倒序输出及其效率详解
Mar 04 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
德生PL330测评
2021/03/02 无线电
PHP游戏编程25个脚本代码
2011/02/08 PHP
php URL验证正则表达式
2011/07/19 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
JS自调用匿名函数具体实现
2014/02/11 Javascript
JavaScript中Function详解
2015/02/27 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
使用python实现rsa算法代码
2016/02/17 Python
python实现BackPropagation算法
2017/12/14 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
Python requests设置代理的方法步骤
2020/02/23 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
CK美国官网:Calvin Klein
2016/08/26 全球购物
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
如何写好优秀的创业计划书
2014/01/30 职场文书
优良学风班申请材料
2014/02/13 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
党员个人承诺书
2015/04/27 职场文书
合作合同协议书
2016/03/21 职场文书