欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python全栈Day 20部分知识点

程序员文章站 2023-11-30 09:25:58
输出 函数的运行时间是10.07073187828064100 装饰器 本质就是函数,功能是为其他函数添加附加功能。 原则: 不修改被修饰函数的源代码 不修改被修饰函数的调用方式 装饰器的知识储备 装饰器=高阶函数+函数嵌套+闭包 高阶函数:接收参数或返回值为函数的函数。 函数嵌套:函数内又定义了函 ......
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import time
 4 def cal(l):
 5     start_time=time.time()
 6     res=0
 7     for i in l:
 8         time.sleep(0.1)
 9         res+=1
10     stop_time=time.time()
11     print('函数的运行时间是%s'%(stop_time-start_time))
12     return res
13 print(cal(range(100)))

输出

函数的运行时间是10.07073187828064
100

 

装饰器

本质就是函数,功能是为其他函数添加附加功能。

  原则:

    不修改被修饰函数的源代码

    不修改被修饰函数的调用方式

  装饰器的知识储备

    装饰器=高阶函数+函数嵌套+闭包

    高阶函数:接收参数或返回值为函数的函数。

    函数嵌套:函数内又定义了函数。

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 def foo():
 4     time.sleep(3)
 5     print('来自foo')
 6 import time
 7 #多执行了一次,不合格
 8 def timer(func):
 9     start_time=time.time()
10     func()
11     stop_time=time.time()
12     print('函数运行时间是%s'%(stop_time-start_time))
13     return func
14 foo=timer(foo)
15 foo()

输出

来自foo
函数运行时间是3.000976085662842
来自foo

由此可见,只用高阶函数是实现不了装饰器的。

装饰器的框架

def timmer(func):
def wrapper():
print(func)
func()
return wrapper()

装饰器实现

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import time
 4 def timmer(func): #func=test
 5     def wrapper(*args,**kwargs):
 6         # print(func)
 7         start_time=time.time()
 8         res=func(*args,**kwargs) #就是在运行test()
 9         stop_time = time.time()
10         print('运行时间是%s' %(stop_time-start_time))
11         return res
12     return wrapper
13 
14 @timmer #test=timmer(test)  要修饰哪个函数就在哪个函数前加
15 def test(name,age,gender):
16     time.sleep(3)
17     print('test函数运行完毕')
18     return '这是test的返回值'
19 res=test('linhaifeng',18,'male')
20 print(res)

输出

test函数运行完毕
运行时间是3.000012159347534
这是test的返回值

 

不用索引如何快速查询两边元素

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 l=[5,2,4,7,9,2,6,0,3]
4 a,b,*_,c,d=l
5 print(a,b,c,d)

输出

5 2 0 3

不用“桥梁”交换的快速方法

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 f1=1
4 f2=2
5 f1,f2=f2,f1
6 print(f1,f2)

输出

2 1

 

带参数验证功能装饰器

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 user_list=[
 4     {'name':'alex','passwd':'123'},
 5     {'name':'linhaifeng','passwd':'123'},
 6     {'name':'wupeiqi','passwd':'123'},
 7     {'name':'yuanhao','passwd':'123'},
 8 ]
 9 current_dic={'username':none,'login':false}
10 
11 def auth(auth_type='filedb'):
12     def auth_func(func):
13         def wrapper(*args,**kwargs):
14             print('认证类型是',auth_type)
15             if auth_type == 'filedb':
16                 if current_dic['username'] and current_dic['login']:
17                     res = func(*args, **kwargs)
18                     return res
19                 username=input('用户名:').strip()
20                 passwd=input('密码:').strip()
21                 for user_dic in user_list:
22                     if username == user_dic['name'] and passwd == user_dic['passwd']:
23                         current_dic['username']=username
24                         current_dic['login']=true
25                         res = func(*args, **kwargs)
26                         return res
27                 else:
28                     print('用户名或者密码错误')
29             elif auth_type == 'ldap':
30                 print('鬼才特么会玩')
31                 res = func(*args, **kwargs)
32                 return res
33             else:
34                 print('鬼才知道你用的什么认证方式')
35                 res = func(*args, **kwargs)
36                 return res
37 
38         return wrapper
39     return auth_func
40 
41 @auth(auth_type='filedb') #auth_func=auth(auth_type='filedb')-->@auth_func 附加了一个auth_type  --->index=auth_func(index)
42 def index():
43     print('欢迎来到京东主页')
44 
45 @auth(auth_type='ldap')
46 def home(name):
47     print('欢迎回家%s' %name)
48 #
49 @auth(auth_type='sssssss')
50 def shopping_car(name):
51     print('%s的购物车里有[%s,%s,%s]' %(name,'奶茶','妹妹','娃娃'))
52 
53 # print('before-->',current_dic)
54 # index()
55 # print('after--->',current_dic)
56 # home('产品经理')
57 shopping_car('产品经理')

输出

认证类型是 sssssss
鬼才知道你用的什么认证方式
产品经理的购物车里有[奶茶,妹妹,娃娃]