------------------------------函数的装饰器和推导式-----------------------------
1.装饰器
def bar():
print(1)
def base():
print(2)
bar = base
bar()
#输出的结果为2
def func(arg):
def inner():
return arg()
return inner
def index():
print('123')
return '666'
v1 = index() #123
v2 = func(index)
index =666 #在此之前已经将index函数赋值给arg所以不影响函数的结果
v3=v2()
#输出的结果为
#123
#123
-
装饰器:在不改变原函数内部代码基础上,在函数执行之前和执行之后自动执行某个功能
def func(arg): def inner(): print('before') v = arg() print('after') return v return inner #第一步:执行func函数并将下面的函数参数传递,相当于:func(index) #第二步:将func的返回值重新赋值给下面的函数名。index = func(index) @func def index(): print('123') return '666' print(index)
-
装饰器的基本结构
#装饰器的编写 def x(func): def y(): ret = func() return ret return y #装饰器的应用 @x def index(): pass @x def manage(): pass #执行函数 v = index() print(v)
-
装饰器应用案例
import time 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(1223) func1()
-
装饰器应用场景:想要为函数扩展功能时,可以选择装饰器
-
记住
- 装饰器的编写格式
def 外层函数(参数): def 内层函数(*args,**kwargs): return 参数(*arfs,**kwargs) return 内层函数
-
装饰器的应用格式
@外层函数 def index(): pass insex()
2.推导式
-
列表推导式
-
目的:方便简便的生成一个列表
-
基本格式
#示例1 vals = [i for i in "yang"] #变量 = [for循环变量 for循环一个可迭代对象] #示例2 val = [i+100 for i in range(10)] print(val) #示例3 #与三元运算混用 val = [99 if i >5 else 66 for i in range(10)] print(val) #示例4 #与lambda函数结合 v2 = [lambda x:x*i for i in range(10)] print(v2[0](2)) #注意输出结果为18 #示例5 def num(): return [lambda x:i*x for i in range(4)] print([m(2) for m in num()]) #注意此时的i为3,m()调用函数,此时参数X为2 #输出结果为[6,6,6,6] #示例6 #筛选 v3 = [i for i in range(10) if i >5] #循环i,先执行判断语句在添加至列表中 print(v3) #应与示例三做区分
-
-
集合推导式
- 其格式与列表生成式一样
- 与列表生成式的区别是其元素不可重复
-
集合推导式
v = { 'k'+str(i):i for i in range(10) if i >5} print(v) #注意集合的特性,当键重复时后者取代前者
3.模块
import time
v = time.time() #获取当前时间,返回值
time.sleep(2) #代码睡两秒,无返回值