zoukankan      html  css  js  c++  java
  • 装饰器

    #装饰器:本质是函数,装饰其他函数,添加附加功能
    #原则:1.不能修改被装饰的函数的源代码;2.不能修改被装饰的函数的调用方式。
    #函数即变量;高阶函数;嵌套函数
     1 import time
     2 def timmer(fuc):   #timmer(test1) fuc == test1
     3     def war(*args,**kwargs):
     4         start_time=time.time()
     5         fuc(*args,**kwargs)      #run  test1()
     6         stop_time=time.time()
     7         print("这是减去的时间%s" %(stop_time-start_time))
     8     return war
     9 
    10 @timmer             #test1 = timmer(test1)
    11 def test1():
    12     time.sleep(3)
    13     print('测试')
    14 
    15 @timmer             #number =timmer(number) number =fuc  number(name,age) = war()
    16 def number(name,age):
    17     print('number',name,age)
    18 
    19 number("gdr",2)
    20 test1()
    
    

    #高阶函数

    #1.把一个函数名当作实参传给另外一个函数#2.返回值中包含函数名
     1 def test2():
     2     time.sleep(2)
     3     print('测试--')
     4 
     5 
     6 def test3(a):
     7     print(a)
     8     return a
     9 
    10 # test2 = test3(test2)
    11 # test2()

    #嵌套函数

    def foo():
        print("这是一个函数")
        def bar():
            print("这是第二个函数")
        bar()
    foo()

    #终极装饰器示例

     1 #!/bin/env python
     2 #-*- coding:utf-8 -*-
     3 
     4 user = 'gdr'
     5 passwd = '123456'
     6 
     7 def log(auth):
     8     print("auth",auth)
     9     def out_warp(fuc):
    10         print("fuc",fuc)
    11         def warp(*args,**kwargs):
    12             if auth == 'local':
    13                 username = input("请输入你的用户名-->").strip()
    14                 password = input("请输入你的密码-->").strip()
    15 
    16                 if user == username and passwd == password:
    17                     #res = fuc(*args,**kwargs)
    18                     fuc(*args,**kwargs)
    19                     print("你的名字是%s,你的密码是%s" %(username,password))
    20                     #return res
    21                 else:
    22                     print("错误的用户名或密码,退出")
    23             else:
    24                 print("没有")
    25         return warp
    26     return out_warp
    27 
    28 @log(auth="local")
    29 def logger():
    30     print("登录成功")
    31     #return "你大爷"
    32 
    33 
    34 logger()
  • 相关阅读:
    pair<,>
    PTA 5-8 File Transfer (25)
    PTA 5-6 Root of AVL Tree (25)
    PTA 5-5 Tree Traversals Again (25)
    HDU4288 Coder(线段树)
    CodeForces 371D Vessels(树状数组)
    POJ2762 Going from u to v or from v to u(单连通 缩点)
    LightOJ 1030 Discovering Gold(期望 概率)
    HDU5115 Dire Wolf(区间DP)
    HDU4008 Parent and son(树形DP LCA)
  • 原文地址:https://www.cnblogs.com/jesse-gong/p/7698727.html
Copyright © 2011-2022 走看看