一.基本概念
《一》.函数式编程:
1.什么是函数式编程?
1) 是面向过程的编程方式;整个程序是以函数为基本单元;
2) 纯粹的函数式编程语言编写的函数没有变量;
3) 函数式编程特点:函数可以作为变量和返回值进行使用;
4) 一个函数如果接另外一个函数作为参数传入,那么这个函数就称为高阶函数;示例:
>> def myadd(x,y,f)
return f(x) + f(y);
2.惰性计算:
1) 什么是惰性计算?
惰性计算是计算机编程中的一个概念,又称为:懒惰计算,懒汉计算,目的在于最小化计算机要做的工作;
2) 两种方式:延迟计算和短路计算;
惰性计算的最重要的好处是它可以构造一个无限的数据类型;
3)Python中的Iterator是惰性计算的序列,所以我们可以用Python表示“全体自然数”,“全体素数”这样的序列;
3.yield关键字:
一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值.
《二》.Python中的装饰器
1.理解Python中的装饰器:
1)装饰器本质上是一个函数,它的作用主要是为了在不修改当前已存在的函数的前提下,为其添加额外的功能;
2)装饰器经常用于又切面需求的场景:比如:插入日志,事务处理,性能测试,缓存,权限校验等,有了装饰器,我们可以将一些常用的且与业务无关的代码抽离出来,从而实现代码的重用。
3)装饰器接收一个函数作为参数,并返回一个函数;可通过直接调用以及使用@方式进行使用;
2.装饰器语法:
示例1:简单的装饰器:
def show_name(func):
def wrapper(* args,**wargs):
print('this function name:%s'% func.__name__)
return func(*args,**wargs)
return wrapper
@show_name
def test_func1():
print('hell world')
test_func1()
结果:
this function name:test_func1hell world
解释: 1) 函数show_name就是一个装饰器,整个过程就像,真正的业务流程在func里面没有改变,业务之外加入了日志像是把test_func1进行了装饰;
2) @符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作;
3)@符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作;
示例2:带有参数的装饰器
解释:
1)由于python的特性,外层传入参数能够被内层定义的函数使用,带参数的装饰器是其实是在原来的装饰器的基础上新封装一层,并且返回一个装饰器;
2)我们可以将它理解为一个含有参数的闭包;
3)代码:
def print_log(level):
def decorator(func):
def wrapper(*agrs,**kwargs):
if level == 'error':
print('it occurs a error,please check it')
return func(*agrs)
return wrapper
return decorator
@print_log(level='error')
def test_func2():
print('this is the function2')
test_func2()
结果:it occurs a error,please check it
this is the function2