python偏函数和高阶函数_python函数式编程-高阶函数与偏函数

高阶函数

python 的函数不仅能接收普通的参数,还可以接收一个函数本身作为参数,这样的函数称为高阶函数

filter() 函数

filter() ,顾名思义,这个函数是一个过滤器。它接收一个函数 f 和一个 list,f 是一个判断函数,对参数进行判断之后依据条件返回 Ture 或 False,filter() 就是用 f 对 list 中的每个元素进行判断,自动过滤掉结果为 False

的元素,将符合条件的元素组成的新 list 并返回.

s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。

当rm为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ‘ ‘)

sorted()函数 内置函数,默认按增序排序

但sorted()也是一个高阶函数,它可以接受一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素x, y,如果x应该排在y前面则返回-1,如果x应该排在y后面则返回1,其他返回0

sorted()函数返回一个新的lis

闭包

内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,成为闭包(Closure).

def calc_sum(lst):

def lazy_sum():

return sum(lst)

return lazy_sum

列表的赋值

对一个列表 ,例如l = ['1', '2', '3'],

如果将它直接赋值给一个变量:a = l,则a是指向这个列表对象的变量,如果修改a,则直接修改了列表本身。如下:

>>> a = l

>>> a

['1', '2', '3']

>>> a[0] = '5'

>>> a

['5', '2', '3']

>>> l

['5', '2', '3']

假设列表中一共有n个元素,若将列表l[]赋值给n个变量:a1, a2, a3 = l,其意义是将列表中的元素赋值给这些变量,此时a1, a2, a3分别等于'1', '2', '3'.

如果将列表赋值给多个变量,但是变量数目不够n个,则会报错。

函数装饰器

在函数调用时想动态地给函数增加一些新的功能,但是又不改变原函数的定义,使用函数装饰器即可实现。

函数装饰器的本质是一个高阶函数

这样做可以极大地简化代码,避免每个函数编写重复代码

格式:

函数装饰器一般是这样的:

@new_fn

def f1(args):

pass

这就相当于:

def f1(args):

pass

f1 = new_fn(f1)

#其中new_fn是一个接收函数的高阶函数

*此时,原有的f1()就被彻底地隐藏了起来,调用f1()时只能调用经过装饰的函数

偏函数

有的函数需要多个参数,偏函数就是将个别参数固定了的新函数。例如:

def int2(x, base=2):

return int(x, base)

functools.partial是一个创建一个偏函数的工具,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:

>>> import functools

>>> int2 = functools.partial(int2, base=2)

>>> int2('1000000')

64

版权声明 自由转载 – 保持署名 – 不可商用 – 不可演绎 (CC3.0 创意共享3.0许可证)

你可能感兴趣的:(python偏函数和高阶函数)