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

  • 相关阅读:
    Saltstack module acl 详解
    Saltstack python client
    Saltstack简单使用
    P5488 差分与前缀和 NTT Lucas定理 多项式
    CF613D Kingdom and its Cities 虚树 树形dp 贪心
    7.1 NOI模拟赛 凸包套凸包 floyd 计算几何
    luogu P5633 最小度限制生成树 wqs二分
    7.1 NOI模拟赛 dp floyd
    springboot和springcloud
    springboot集成mybatis
  • 原文地址:https://www.cnblogs.com/chenyuan-1995/p/9678706.html
Copyright © 2011-2022 走看看