函数式编程——函数笔记

夏侯楷
2023-12-01

Python函数式编程(函数)

2.2、从函数开始:

定义一个函数:

def add(x, y):

return x+y

使用lambda可以定义简单单行匿名函数:lambda的语法是:lambda args:expression

参数与普通函数一样,表达式的值就是匿名函数返回的值

lambda_add = lambda x,y:x+y

使用lambda的目的是编写简单的,偶尔的,可预见不会被修改的函数。

2.2、使用函数赋值

add_a_function_to_anther = add

print add_a_function_to_another(1, 2) //3

既然函数可以被变量引用,那么将函数作为参数和返回值就是很寻常的做法。

2.3、闭包

闭包是一类特殊的函数:如果一个函数定义在另一个函数的作用域中,并且函数中引用了外部函数的局部变量,那么函数就是一个闭包。e.g.:

def f():

n = 1

def inf():

print n

inf()

n = 'x'

inf()

类似于普通模块函数和模块中定义全局变量的关系:修改外部变量能影响内部作用域中的值,而在内部作用域中定义同名变量则将屏蔽(隐藏)外部变量。

需要在函数中修改全局变量,使用关键字global。Python2中没有支持闭包中修改参数,Python3中关键字nonlocal可以修改。

2.4、作为参数

与将函数当做参数传递大体一样。

定义一个函数:

def reduce(function, lst, initial):

result = initial

for num in lst:

result = function(result, num)

result result

print reduce(add, lst, 0) //计算加法

print reduce(lambda x,y:x*y, lst, 1) //计算乘法

2.5、作为返回值

函数作为返回值通常与闭包一起使用。

def map(function, lst):

result = []

for item in lst:

result.append(function(item))

result result

使用map为lst中的每个元素加1:

lst = map(lambda x:add(1,x), lst)

print reduce(lambda x,y:x*y, lst, 1)

根据指定的做操作数,能生成一个加法函数,用起来像这样:

lst = map(add_to(10), lst) #add_to(10)返回一个函数,这个函数接受一个参数并加上10后返回

下面是add_to函数:

def add_to(n):

return lambda x:add(n,x)

通过已经存在的某个函数指定数个参数,生成一个新的函数,这个函数只需要传入剩余未指定的参数就能实现原函数的全部功能,这被称为偏函数。Python内置的functools模块提供了一个函数partial,可以为任意函数生成偏函数:

functools.partial(func[, *args][, **keywords])

需要指定生成偏函数的函数,指定数个参数或者命名,然后partial将返回一个像函数一样可调用的对象(偏函数)。

另一个特殊的例子谁装饰器,装饰器用于增强甚至改变原函数的功能。



原文出处:http://www.cnblogs.com/huxi/archive/2011/06/18/2084316.html

 类似资料: