Python进阶之偏函数
2015-08-01 14:48
525 查看
偏函数
本文整理自慕课网廖学峰老师的python视频教程
当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。比如,int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换:
[code]>>> int('12345') 12345
但int()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做 N 进制的转换:
[code]>>> int('12345', base=8) 5349 >>> int('12345', 16) 74565
假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去:
[code]def int2(x, base=2): return int(x, base)
这样,我们转换二进制就非常方便了:
[code]>>> int2('1000000') 64 >>> int2('1010101') 85
functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:
[code]>>> import functools >>> int2 = functools.partial(int, base=2) >>> int2('1000000') 64 >>> int2('1010101') 85
所以,functools.partial可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,这样,新函数调用的难度就降低了。
practice
在 python进阶之自定义排序中我们在sorted这个高阶函数中传入自定义排序函数就可以实现忽略大小写排序。请用functools.partial把这个复杂调用变成一个简单的函数:[code]sorted_ignore_case(iterable)
解答
要固定sorted()的cmp参数,需要传入一个排序函数作为cmp的默认值。
[code]from filecmp import cmp import functools # sorted_ignore_case = functools.partial(sorted, cmp=lambda s1, s2: cmp(s1.upper(), s2.upper())) python2 的写法 sorted_ignore_case = functools.partial(sorted, key=lambda a:a.upper()) print (sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit']))
相关文章推荐
- [python 爬虫学习]利用cookie模拟网站登录
- python模块 - 常用模块推荐
- python模块 - 其它常用模块推荐
- 装饰模式和python装饰器
- 利用Python监测MySQL主从状态
- python 中文乱码问题2
- python菜鸟日记1
- Ubuntu下使用Python+flask+MySQL的架构搭建Web框架
- Python进阶之装饰器@decorator
- python去重(针对密码)
- virtualenv
- PYTHON 双引号 单引号 多引号区别
- Python中何时使用断言 assert
- python 抓取天气时碰到的一点正则问题 (.*)和(.*?)
- 详解Python3中的Sequence type的使用
- python调用Java-JPype使用介绍
- python matplotlib 基础
- Python基础教程笔记——第1章
- python笔记之编程风格大比拼
- 详解Python3中的Sequence type的使用