一、lambda表达式
作用:定义一个匿名函数
对比:
普通函数:
def add(x,y):
return x+y
lamnda表达式格式:
lambda parameter_list:expression
替换普通函数为:
lambda x,y:x+y
案例:
f = lambda x,y:x+y
print(f(1,2))
结果:3
注意:冒号(:)后边不能是代码块
三元表达式
格式:条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果
案例:
x = 5
y = 3
res = x if x > y else y
print(res)
结果:5
二、map(类)的使用
案例:
a_list = [1,2,3,4,5,6]
def square(x):
return x * x
res = map(square,a_list)
print(list(res))
结果:[1, 4, 9, 16, 25, 36]
map与lambda结合使用
案例1:
a_list = [1,2,3,4,5,6]
res = map(lambda x:x*x,a_list)
print(list(res))
结果:[1, 4, 9, 16, 25, 36]
案例2:(传递两个参数)
a_list = [1,2,3,4,5,6]
b_list = [1,2,3,4,5,6]
res = map(lambda x,y:x*x+y*y,a_list,b_list)
print(list(res))
结果:[2, 8, 18, 32, 50, 72]
三、 reduce(连续计算)的使用
案例1:
from functools import reduce
a = [1,2,3,4,5,6,7,8,9,10]
res = reduce(lambda x,y:x+y,a)
print(res)
结果:55
总结:计算过程为 ((((((((1+2)+3)+4)+5)+6)+7)+8)+9)+10
案例2:(带初始值)
from functools import reduce
a = [1,2,3,4,5,6,7,8,9,10]
res = reduce(lambda x,y:x+y,a,10)
print(res)
结果:65
四、 filter(过滤)的使用
案例:
a = [1,1,0,3,1,0]
res = filter(lambda x: True if x == 1 else False,a )
print(list(res))
结果:[1, 1, 1]
小总结:命令式编程和函数式编程的区别
命令式编程:比如 def if else for
函数式编程:比如 map reduce filter lambda
五、装饰器
定义:为其他函数添加附加功能
原则:对修改是封闭的,对扩展示开放的
案例1:
import time
def demo1():
print('这是一个函数')
def demo2():
print('这是一个函数')
def print_time(func):
print(time.time())
func()
print_time(demo1)
print_time(demo2)
结果:
1531528022.2958481
这是一个函数
1531528022.3038638
这是一个函数
案例2:
import time
def decorator(func):
def wrapper():
print(time.time())
func()
return wrapper
def demo1():
print('这是一个函数')
res = decorator(demo1)
res()
结果:
1531528780.3672793
这是一个函数
案例3:(完整装饰器)
import timedef decorator(func):
def wrapper():
print(time.time())
func()
return wrapper
@decorator
def demo1():
print('这是一个函数')
demo1()
结果:
1531529157.8881683
这是一个函数
案例4:支持参数的装饰器
import time
def decorator(func):
def wrapper(name):
print(time.time())
func(name)
return wrapper
@decorator
def demo1(name):
print('名字为',name)
demo1('python')
结果:
1531529642.7177546
名字为 python
案例5:支持多个参数的装饰器
import timedef decorator(func):
def wrapper(*args):
print(time.time())
func(*args)
return wrapper
@decoratordef demo1(name):
print('名字为',name)
@decorator
def demo2(name,age):
print('名字为',name)
print('年龄为',age)
demo1('python')
demo2('python',30)
结果:
1531530029.4683325
名字为 python
1531530029.4683325
名字为 python
年龄为 30
案例6:带关键字参数
import timedef decorator(func):
def wrapper(*args,**kw):
print(time.time())
func(*args,**kw)
return wrapper
@decorator
def demo1(name):
print('名字为',name)
@decorator
def demo2(name,age):
print('名字为',name)
print('年龄为',age)
@decorator
def demo3(name,age,**kw):#添加关键字参数
print('名字为',name)
print('年龄为',age)
print('关键字参数为',kw)
demo1('python')
demo2('python',30)
demo3('python',30,a=1,b=2,c='123')
结果:
1531530752.3828163
名字为 python
1531530752.3828163
名字为 python
年龄为 30
1531530752.3828163
名字为 python
年龄为 30
关键字参数为 {'a': 1, 'b': 2, 'c': '123'}
总结:(1)代码复用(2)功能扩展 (3)flask中的路由控制器 (4)一个函数可以有多个装饰器