装饰器 内置函数

装饰器:

   本质就是闭包

开放封闭原则
扩展开发,修改源代码封闭,不能修改调用方式
在不该源代码的基础上添加功能
@装饰器的名字   在被装饰的函数正上方  独占一行
@语法糖  被装饰的函数名 = 装饰器的名字(被装饰的函数名)

基本语法格式:
1 def inner(func):
2     def warper(*args,**kwargs):
3         ret=func(*args,**kwargs)
4         return ret
5     return warper
6 @inner
用的时候@一下最外层函数。
1 def inner(func):
2     def warper(*args,**kwargs):
3         ret=func(*args,**kwargs)
4         return ret
5     return warper
6 @inner
7 def num_sum(*args,**kwargs):
8     print(*args)
9 num_sum(5,4,5,6,8,2)

    执行结果:5 4 5 6 8 2

eg:
 1 import time
 2 def inner(func):    # 闭包, func现在就是foo的内存地址
 3     x=func           # 把foo的内存地址赋值给了x
 4     def wapeer():
 5         s_time=time.time()
 6         x()          # 执行foo()
 7         ss_time=time.time()
 8         print(ss_time-s_time)
 9     return wapeer           # 返回函数,不能加() 函数名当作值返回
10 @inner                       # 被装饰的函数正上方加一个 @+装饰器的名字
11 def foo():
12     print('is foo')
13 foo()
同一个函数被多个装饰器装饰
@wrapper1
@wrapper2
@wrapper3
def func():
pass
1 2 3 func 3 2 1

匿名函数:

lambda  匿名函数:
lambda 参数:返回值
匿名函数没有名字,怎么查看 函数.__name__
匿名函数的返回值只能是一个,不能是多个
匿名函数可不可以写到一行
print((lambda x:x)()) 调用的时候要传参
1 lst=[1,2,3,4]
2 print(list(map(lambda x:x**2+1,lst)))

内置函数:

 

排序的函数:
sorted('可迭代对象',key='函数名(函数名里写排序规则),reverse=True的时候是降序')
1 ls=[1,2,3,4]
2 def func(ls):
3     lst=[]
4     for i in ls:
5         lst.append(i**i)
6     return lst
7 print(sorted(func(ls),reverse=True))


过滤函数:
filter() 内置函数(筛选函数|过滤函数)
filter('写好过滤规则的函数','可迭代对象')   函数可以是匿名,也可以是定义好的
1 def foo(x):
2     if x['age']>15:
3         return x
4 dic=[{'name':'乔狗','age':19},{'name':'乔二狗','age':16}]
5 print(list(filter(foo,dic)))
6 print(list(filter(lambda x:x['age']>17,dic)))


映射函数:
map() 映射函数
可以快速将多个元素相同的可迭代对象,进行上下累加  返回的是一个数据
语法: map(function, iterable, ...)
1 lst=[1,2,3,4]
2 def func(x):
3     return x**2
4 print(list(map(func,lst)))


外号:拉链函数
zip() #拉链
返回的是对个,如果有三个可迭代对象,就按照最短的进行输出


累积算函数:
reduce() 累 计算
快速求一个可迭代对象的累计算
reduce 函数  函数会对参数序列中元素进行累积  累计算
语法: reduce(function, iterable[, initializer])
function -- 函数,有两个参数
iterable -- 可迭代对象
initializer -- 可选,初始参数
1 from functools import reduce
2 lst=[2,3,4]
3 print(reduce(lambda x,y:x**y,lst))


枚举:
enumerate() #枚举  将可迭代对象放到里边,默认数字是0开始,自己指定开始的数字

四舍五入:
round(4.44)

 

posted @ 2019-01-16 15:24  53Dawns  阅读(159)  评论(0编辑  收藏  举报