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

    #-----函数装饰器-----
     
    1、作用域:L _E_G_B
    2、高阶函数 a、函数名可以作为参数输入 b、函数名可以作为返回值
    3、闭包
    1 def outer():
    2     x = 10
    3     def inner(): #inner是内部函数
    4         print(x) #外部环境的一个变量
    5     return inner #内部函数inner就是一个闭包
    6 outer()()
    7 
    8 #inner() #1、局部变量,全局变量无法调用


    #-----关于闭包-----

      闭包 = 函数 + 定义函数时的环境

    #代码原则:开放封闭原则  代码书写原则(对修改封闭,对扩展开放)

    #-----装饰器函数

     1 import time
     2 
     3 def show_time(f): #装饰器函数
     4     def inner():
     5         start = time.time()
     6         f()
     7         time.sleep(1)
     8         end = time.time()
     9         print("spend %s"% (end-start))
    10     return inner
    11 
    12 @show_time
    13 def foo():
    14     print('test')
    15 #foo=show_time(foo)
    16 foo()
    17 
    18 @show_time
    19 def bar():
    20     print('bar')
    21 # bar = show_time(bar)
    22 bar()
    23 
    24 def show_time(f):
    25     def inner(x,y):
    26         start = time.time()
    27         f(x,y)
    28         time.sleep(1)
    29         end = time.time()
    30         print(end-start)
    31     return inner
    32 
    33 @show_time
    34 def add1(a,b):
    35     print(a+b)
    36 add1(1,2)
    #-----装饰器加参数

     1 def logger(flag='False'):
     2     def show_time(f):
     3         def inner(*args):
     4             start_time = time.time()
     5             f(*args)
     6             time.sleep(1)
     7             end_time = time.time()
     8             print(end_time-start_time)
     9             if flag == "True":
    10                 print('log!')
    11         return inner
    12     return show_time
    13 
    14 @logger('True')
    15 def add(*args):
    16     sum1 = 0
    17     for i in args:
    18         sum1 += i
    19     print(sum1)
    20 
    21 add(1,2,4)
    #-----用户信息登录验证小程序-----

    #-----创建用名密码
     1 import json
     2 
     3 def create_user(a,b,c,d):
     4     d = {
     5         "name":a,
     6         "passwd":b
     7     }
     8     with open(c,"w") as f:
     9         json.dump(d,f)
    10 create_user("dream","abc123","jd.json","jd_list")
    11 create_user("rise","rise123","qq.json","qq_list")
    12 create_user("wx","wx123","wx.json","wx_list")
    #-----用户信息验证
     1 import json
     2 
     3 login_status = "False"
     4 def login(auth_type):
     5     def verify(func):
     6         def inner():
     7             global login_status
     8             flag = True
     9             while flag:
    10                 c_list = ['jd','qq','wx']
    11                 for i in c_list:
    12                     if auth_type == i.strip():
    13                         files = auth_type
    14                         u_name = input("please input %s name:" % files).strip()
    15                         u_passwd = input("please input %s passwd:" % files).strip()
    16                         with open(("%s.json") % files, "r") as f:
    17                             data = json.load(f)
    18                             name = data["name"]
    19                             passwd = data["passwd"]
    20                             if u_name == name and u_passwd == passwd:
    21                                 login_status = "True"
    22                                 func()
    23                                 flag = False
    24             else:
    25                 func()
    26         return inner
    27     return verify
    28 
    29 @login("jd")
    30 def home():
    31     print("welcome to home page")
    32 home()
    33 
    34 @login("qq")
    35 def finance():
    36     print("welcome to finance page")
    37 finance()
    38 
    39 @login("wx")
    40 def book():
    41     print("welcome to book page")
    42 book()
    
    
  • 相关阅读:
    C3P0的详细配置说明
    关于commons-fileupload组件上传文件中文名乱码问题
    手写JDBC
    使用try-with-resource遇到的问题
    Java基础学习总结——Java对象的序列化和反序列化
    IDEA查看第三方jar包的源代码时出现Decompiled.class file, bytecode version:52.0 (Java 8)的解决方案
    软件工程课程周进度报告 第六周
    地铁合作的第二周
    第六周进度总结
    地铁合作的第一周
  • 原文地址:https://www.cnblogs.com/rise-home/p/11597424.html
Copyright © 2011-2022 走看看