• Python全栈Day 20部分知识点


     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
    鬼才知道你用的什么认证方式
    产品经理的购物车里有[奶茶,妹妹,娃娃]

  • 相关阅读:
    perl中的反勾号(``),system和exec
    经典的JavaScript效果
    关于Asp.net ajax下的异常处理
    史上最酷的IIS一键安装,你想要吗? 博客园全球首发
    下载最新的AjaxControlToolkit控件包
    Asp.net开发中不可靠的编码习惯
    用Ajax保持会话
    对ViewState的一点思考
    对微软Asp.net Ajax 1.0的AutoComplete控件的几处修正和增强
    还为安装IIS发愁吗?全系列IIS自动安装程序倾囊奉送!--技术原理介绍及成品下载
  • 原文地址:https://www.cnblogs.com/chenyuan-1995/p/9678706.html
Copyright © 2020-2023  润新知