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

    高阶函数:

    def func():
        print("This is func")
    
    
    def foo(func):
        print("this is foo")
        func()
        return func
    
    
    foo(func)    # 将函数 func 作为参数传递给 foo
    print(foo(func))    # foo 的返回值是
    
    
    执行结果:
    this is foo
    This is func
    this is foo
    This is func
    <function func at 0x000001B6D6A02EA0>

    匿名函数:

    def foo():
        print("this is ", foo)
    
    
    print(foo)    # 表示的是函数
    foo()    # 执行foo函数
    
    foo = lambda x : x * 2   # 匿名函数
    print(foo("10"))    # 执行的是 lambda 表达式,而不是原来的 foo 函数,因为 foo 被重新定义了


    执行结果:

    <function foo at 0x000002D11FF4AB70>
    this is foo
    1010

     装饰器:

     1 import time
     2 
     3 username = "guoxf"
     4 password = "123456"
     5 
     6 def auth(a):
     7     print("ahth a:", a)
     8     def first(func):
     9         print("first func:", func)
    10         def second(*args, **kwargs):
    11             start_time = time.time()
    12             print(*args, **kwargs)
    13             user = input("Username:")
    14             pwd = input("Password:")
    15             if user == username and pwd == password:
    16                 func(*args, **kwargs)
    17                 stop_time = time.time()
    18                 print("run time:%s" % (stop_time - start_time))
    19             else:
    20                 exit("输入错误,退出程序。。。")
    21 
    22         return second
    23     print("this is first", first)
    24 
    25     return first
    26 
    27 
    28 def test1():
    29     print("welcome to chaina...")
    30 
    31 
    32 # @auth("local")     
    33 def test2(username, password):
    34     time.sleep(1)
    35     print("this is test2...")
    36 
    37 
    38 @auth("authtication")
    39 def test3():
    40     time.sleep(1.5)
    41     print("what are you doing...")
    42 
    43 
    44 
    45 first1 = auth("local")    # first1 指向 auth 函数的返回值first 的函数
    46 test2=  first1(test2)    # test2 指向 first 函数的返回值second 的函数; test2 传给了 func
    47 test2("guoxf","123456")    # 执行second 函数
    48 
    49 test3()

    执行结果:

    ahth a: authtication
    this is first <function auth.<locals>.first at 0x000002093E80AF28>
    first func: <function test3 at 0x000002093E82F048>
    ahth a: local
    this is first <function auth.<locals>.first at 0x000002093E80AF28>
    first func: <function test2 at 0x000002093E80AEA0>
    guoxf 123456
    Username:guoxf
    Password:123456
    this is test2...
    run time:140.81427788734436
    
    Username:guoxf
    Password:1234567
    输入错误,退出程序。。。

    下图中红框圈中的部分,两者结果相同

     

  • 相关阅读:
    postgresql修改postgres用户密码
    centos7 安装netstat命令工具
    sqlplus、lsnrctl命令工具不可用(libclntsh.so.11.1)
    oracle修改数据文件目录
    oracle数据库主主复制
    Spring--quartzJob配置
    TimerTask--spring配置
    SSM+Apache shiro--ehcache缓存清理
    SSM+Apache shiro--自定义realm
    ssm+Apache shiro--配置文件
  • 原文地址:https://www.cnblogs.com/gxfaxe/p/9524717.html
Copyright © 2011-2022 走看看