zoukankan      html  css  js  c++  java
  • 装饰器概念及运用

    #!/user/bin/env python3
    # -*-encoding="utf-8"-*-
    # 1.装饰器概念
    #装饰器本身就是函数,为别的函数添加附加功能。把握两个遵循的条件。
    # 1.不修改被修饰的源代码内容。
    # 2.不修改被修饰函数的调用方式。
    # 装饰器=高阶函数+函数嵌套+闭包
    # 高阶函数定义:
    # 1.函数接收的参数是一个函数名
    # 2.函数的返回值是一个函数名
    # 3.满足上述条件任意一个,都可称之为高阶函数
    #把函数当做参数传给高阶函数:
    # def foo():
    # print("我的函数名是做为一个高阶函数传给其它的函数的")
    # def fc1(fucn):
    # print("我是函数fc1,接受函数%s传过来的值" %fucn)
    # fucn()
    # def fc2(fucn):
    # print("我是函数fc2,函数返回值是%s" %fucn)
    # return fucn
    # fc1(foo)
    # fc2(foo)
    # import time
    # def foo():
    # time.sleep(0.2)
    # print("参数来自foo")
    # def fc1(fucn):
    # ks_time=time.time()
    # fucn()
    # js_time=time.time()
    # print("函数%s运行的时间是%s" %(fucn,js_time-ks_time))
    # fc1(foo)
    # import time
    # def foo():
    # print('from the foo')
    #
    # def timmer(func):
    # start_time=time.time()
    # return func
    # stop_time=time.time()
    # print('函数%s 运行时间是%s' %(func,stop_time-start_time))
    # foo=timmer(foo)
    # foo()
    # 高阶函数总结
    # 1.函数接收的参数是一个函数名
    #   作用:在不修改函数源代码的前提下,为函数添加新功能,
    #   不足:会改变函数的调用方式
    # 2.函数的返回值是一个函数名
    #   作用:不修改函数的调用方式
    #   不足:不能添加新功能
    # 函数嵌套的例子:
    # def father(name):
    # print('from father %s' %name)
    # def son():
    # print('from son')
    # def grandson():
    # print('from grandson')
    # grandson()
    # son()
    # print(father('xfz'))
    #一层套一层的最里面的函数形成的就是一个闭包。
    # 3.装饰器的框架
    # import time
    # def zsq(func):
    # def gongnenghanshu():
    # ks_time=time.time()
    # func()
    # js_time=time.time()
    # print("函数运行的时间是:%s" %(js_time-ks_time))
    # return gongnenghanshu
    # # 例子:
    # @zsq
    # def foo():
    # time.sleep(3)
    # print("运行了函数foo")
    # res=zsq(foo) #这是间接方式实现的装饰,但是更改了函数的调用方式.@语法甜糖,加到要调用装饰器的前面
    # res()
    # foo()
    #4.加返回值的方法 例2
    import time
    def zsq(func):
    def gongnenghanshu():
    ks_time=time.time()
    res=func()
    js_time=time.time()
    print("函数运行的时间是:%s" %(js_time-ks_time))
    return res
    return gongnenghanshu
    # 例子:
    @zsq
    def foo():
    time.sleep(1)
    print("运行了函数foo")
    return "我是要添加的函数返回值"
    z=foo()
    print(z)
  • 相关阅读:
    URL传参到servlet含特殊字符——#号无法传递
    textarea标签中间出现空格问题
    MySQL学习笔记(23)——自定义函数
    修改日期插件问题
    获取Spring的ApplicationContext的方法
    数据库用户被锁
    ava获得当前文件路径
    前端框架
    LeetCode 485. 最大连续1的个数
    LeetCode 283. 移动零
  • 原文地址:https://www.cnblogs.com/Centwei/p/10466385.html
Copyright © 2011-2022 走看看