[Python]偏函数应用
2014-07-18 19:25
204 查看
Currying的概念将函数式编程的概念和默认参数以及可变参数结合在一起。一个带n个参数,curried的函数固化第一个参数为固定参数,并返回另一个带n-1个参数的函数对象,分别类似于LISP的原始函数car和cdr的行为。Currying能泛化称为偏函数应用(partial function application,PFA),这种函数将任意数量(顺序)的参数的函数转化为另一个带剩余参数的函数对象。
简单的函数式例子
700
当调用带多个参数的函数的时候,PFA是最好的办法。使用带关键字参数的PFA也是较简单的,因为能显示给出特定的参数,要么作为curried参数,要么作为那些更多在运行时刻传入的变量,并且我们不需要关心次序。下面的一个例子来自Python文档中关于在应用程序中的应用,在这些程序中需要经常将二进制(作为字符串)转换成整型。
警惕关键字
如果你创建了不带base关键字的偏函数,比如,baseTwoBAD = partial(int,2),这可能会让参数以错误的顺序传入int(),因为固定参数的总是放在运行在运行时刻参数的左边,比如baseTwoBAD(x) == int(x,2)。如果你调用它,它会将2作为需要转化的数字,它会将2作为需要转化的数字,base作为‘10010’来传入,会产生一个TypeError异常。由于关键字放置在恰当的位置,顺序就得固定下来,如大家所知,关键字参数总是出现在形参之后,所以base2(x)
== int(x,2)。
File "----------------------x----------------------", line y, in <module>
baseTwoBAD('10010')
TypeError: an integer is required
简单的函数式例子
from operator import add,mul from functools import partial add1 = partial(add,1) mul100 = partial(mul,100) print add1(10) print mul100(7)11
700
当调用带多个参数的函数的时候,PFA是最好的办法。使用带关键字参数的PFA也是较简单的,因为能显示给出特定的参数,要么作为curried参数,要么作为那些更多在运行时刻传入的变量,并且我们不需要关心次序。下面的一个例子来自Python文档中关于在应用程序中的应用,在这些程序中需要经常将二进制(作为字符串)转换成整型。
base2 = partial(int, base=2) base2.__doc__ = 'Convert base 2 string to an int.' print base2('10010')18
警惕关键字
如果你创建了不带base关键字的偏函数,比如,baseTwoBAD = partial(int,2),这可能会让参数以错误的顺序传入int(),因为固定参数的总是放在运行在运行时刻参数的左边,比如baseTwoBAD(x) == int(x,2)。如果你调用它,它会将2作为需要转化的数字,它会将2作为需要转化的数字,base作为‘10010’来传入,会产生一个TypeError异常。由于关键字放置在恰当的位置,顺序就得固定下来,如大家所知,关键字参数总是出现在形参之后,所以base2(x)
== int(x,2)。
baseTwoBAD = partial(int,2) baseTwoBAD('10010')Traceback (most recent call last):
File "----------------------x----------------------", line y, in <module>
baseTwoBAD('10010')
TypeError: an integer is required
相关文章推荐
- python中对象以及一些函数的应用
- Python os.getcwd()函数的实际应用方案介绍
- python max()函数的应用
- python中threading的高级函数应用解析
- python中list列表的高级应用 高级函数
- 关于python中help函数的应用
- python基础教程共60课-第22课函数应用示例
- python max()函数的应用
- python max()函数的应用
- Python中函数partial的应用
- python的排序函数sort,sorted在列表排序和字典排序中的应用详解和举例
- python中的 range() 函数参数解释应用
- Python学习24:偏函数应用(partial)
- python max()函数的应用
- python max()函数的应用
- 函数应用SAE-Python教程(一) 在SAE上进行Python的开发
- Python学习19:其他应用(列表综合、列表或元组作为函数参数、lambda形式)
- python max()函数的应用
- python max()函数的应用
- 零基础学python-19.6 生成器函数应用