装饰器&推导式
函数在被调用的时候,每次都会开辟一个新的内存地址,互不干扰
#经典案例 def func(num): def inner(): print(num) return inner result = [] for i in range(10): f = func(i) result.append(f) v1 = result[0]() v2 = result[9]() print(v1,v2)
1
2
3
4
5
6
7
8
9
10
11
12
# 1.装饰器
- 装饰器:在不改变原函数内部代码也不改变调用方式的基础上,在执行函数之前和之后自动执行某个功能.
# 1.1基本结构
def 外层函数(参数):
def 内层函数(*args,**kwargs);
return 参数(*args,**kwargs)
return 内层函数
@外层函数
def index()
pass
1
2
3
4
5
6
7
2
3
4
5
6
7
#示例:
def func(arg):
def inner():
v = arg()
return v
return inner
@func
def index():
print(123)
return 666
print(index)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
- @func :执行func函数把下面色函数当做参数传递,相当于:func(index)
- 将外层函数的返回值(内层函数)重新赋值给下面的函数名index,index = func(index)
# 1.2装饰器基本应用
应用场景:想要为函数扩展功能时,使用装饰器
计算运行时间
- 时间模块:time.time()获取当前时间
- time.sleep('秒数')睡眠
# 计算函数执行时间 def wrapper(func): def inner(): start_time = time.time() v = func() end_time = time.time() print(end_time-start_time) return v return inner @wrapper def func1(): time.sleep(2) print(123) @wrapper def func2(): time.sleep(1) print(123) func1()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 2.推导式
# 2.1列表推导式
方便生成一个列表
基本格式
# 变量 = [元素 for 元素 in 可迭代对象] # 变量 = [元素 for 元素 in 可迭代对象 if 条件] **条件为True时元素才能添加到列表 lis = [i for i in 'bigox'] print(lis) lis = [i+100 for i in rang(10)] print(lis) lis = [99 if i>5 else 66 for i in range(10)] print(lis)
1
2
3
4
5
6
7
8
9
10
# 新浪微博面试题
v8 = [lambda x:x*i for i in range(10)]
# 1.请问 v8 是什么?
# 2.请问 v8[0](2) 的结果是什么?
# 面试题
def num():
return [lambda x:i*x for i in range(4)]
# num() -> [函数,函数,函数,函数]
print([ m(2) for m in num() ]) # [6,6,6,6]
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
推导式中,if判断条件在for循环之前的作用就是条件判断,放在for循环之后就是筛选;
#判断 lis = [99 if i>5 else 66 for i in range(10)] #筛选 lis = [99 for i in range(10) if >5]
1
2
3
4列表推导式比较特殊,会生成一个自己的作用域,i在列表推导式的作用域中,在外面读不到.
# 2.2集合推导式
参照列表推导式,注意集合不能重复
# 变量 = {元素 for 元素 in 可迭代对象} # 变量 = {元素 for 元素 in 可迭代对象 if 条件} **条件为True时元素才能添加到列表
1
2
# 2.3字典推导式
基本格式
dic = {'k'+str(i) for i in range(10)}
1
# 小结
装饰器
- 书写格式
- 原理
- 应用格式
推导式
内置模块
- time.time() 获取当前时间,具有返回值
- time.sleep(秒数) 运行时驻留秒数
上次更新: 2023/04/16, 18:35:33