博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python全栈Day 20部分知识点
阅读量:4556 次
发布时间:2019-06-08

本文共 3816 字,大约阅读时间需要 12 分钟。

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 func14 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 res12     return wrapper13 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 python2 # -*- coding:utf-8 -*-3 l=[5,2,4,7,9,2,6,0,3]4 a,b,*_,c,d=l5 print(a,b,c,d)

输出

5 2 0 3

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

1 #!/usr/bin/env python2 # -*- coding:utf-8 -*-3 f1=14 f2=25 f1,f2=f2,f16 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 res19 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']=username24 current_dic['login']=True25 res = func(*args, **kwargs)26 return res27 else:28 print('用户名或者密码错误')29 elif auth_type == 'ldap':30 print('鬼才特么会玩')31 res = func(*args, **kwargs)32 return res33 else:34 print('鬼才知道你用的什么认证方式')35 res = func(*args, **kwargs)36 return res37 38 return wrapper39 return auth_func40 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

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

 

转载于:https://www.cnblogs.com/chenyuan-1995/p/9678706.html

你可能感兴趣的文章
被废弃的 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit
查看>>
冲刺1
查看>>
git rebase之前需要commit才行
查看>>
python,os操作文件,文件路径(上一级目录)
查看>>
jquery格式化数字
查看>>
解决多线程委托二义性问题
查看>>
love2d教程3--输入和音乐
查看>>
php代码检查
查看>>
MyBatis笔记
查看>>
Android 四大组件之BroadcastReceiver
查看>>
0927-练习
查看>>
android TextView属性详解
查看>>
redis 主从同步搭建
查看>>
Wp7中,使你的程序在程序列表中的名称自适应手机语言设置
查看>>
error: .repo/manifests/: contains uncommitted changes
查看>>
逆元(inv)
查看>>
CentOS Docker 安装
查看>>
debian(kali Linux) 安装net Core
查看>>
centos 7防火墙设置
查看>>
自定义进度条(圆形、横向进度条)
查看>>