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实现在无须过多援引的情况下创建字典的方法
Sep 25 Python
Python类的专用方法实例分析
Jan 09 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
如何处理Python3.4 使用pymssql 乱码问题
Jan 08 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
python 与服务器的共享文件夹交互方法
Dec 27 Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 Python
超实用的 30 段 Python 案例
Oct 10 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
Feb 05 Python
python exit出错原因整理
Aug 31 Python
python爬虫使用scrapy注意事项
Nov 23 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 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通过sort()函数给数组排序的方法
2015/03/18 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
jqgrid 简单学习笔记
2011/05/03 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
python time模块用法实例详解
2014/09/11 Python
Python转换HTML到Text纯文本的方法
2015/01/15 Python
Python中非常实用的一些功能和函数分享
2015/02/14 Python
总结Python编程中三条常用的技巧
2015/05/11 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python实现拼图小游戏
2020/02/22 Python
python实现打砖块游戏
2020/02/25 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
python批量生成条形码的示例
2020/10/10 Python
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
优秀企业获奖感言
2014/02/01 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
个人存款证明书
2014/10/18 职场文书
公司股东出资证明书
2014/11/01 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
会计专业自荐信范文
2019/05/22 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python