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)
  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/Centwei/p/10466385.html
Copyright © 2011-2022 走看看