python自学(十)——函数式编程

一、匿名函数

如题,匿名函数,直白点,就是没有具体名称的函数,但是不影响函数本身的使用。
作业:使用匿名函数改造下面的代码

def is_odd(n):
    return n % 2 == 1
L = list(filter(is_odd, range(1, 20)))


如下

L = list(filter(lambda n : n%2 == 1, range(1,20)))

二、装饰器(decorator)

本身是对函数进行装饰的能力,在不改变已有函数代码的前提下,给函数“装饰”新增的功能。

2.1 .name

函数的内置属性,表示函数的名称

def now() :
	print(1)

now.__name__ // "now"
2.2 @
语法 :
def 函数 A(function ()){
}

@A
def 函数B

表示将@下面的函数,作为参数传给@后面的函数,进行执行,明白这个才能进行下一个
2.2 decoreate

现在要在now函数中,增加一个打印的功能,比如开始打印和结束打印,就是需要在目标函数的执行开始和执行结束增加功能装饰。
作业1,给目标函数打印执行时间

def log(fn):
	def decorete(*x,**y):
		print('%s 执行了 %2f ms' % (fn.__name__, 11.567))
		fn(*x,**y)
	return decorete
@log
def a(x,y):
	print('%d + %d = %d'%(x,y,x+y))

作业2:请编写一个decorator,能在函数调用的前后打印出’begin call’和’end call’的日志

def log(fn):
	def decorete(*x,**y):
		print('begin called %s' % fn.__name__)
		f = fn(*x,**y)
		print('end called %s' % fn.__name__)
		return f
	return decorete
@log
def a(x,y):
	print('%d + %d = %d'%(x,y,x+y))

三、偏函数

直白点,就是优雅的帮我们节省代码

import functools
int2 = functools.partial(int)
int2(2.3) // 2

和上面装饰器不同的是,他是返回一个新的函数,不会对原函数进行操作
这个文档更详细偏函数

发布了60 篇原创文章 · 获赞 66 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u012436704/article/details/96908863