• 第33天pytho学习装饰器:高级函数部分演示


    #迭代器:把列表变为迭代器
    # l=[1,3]
    # l1=iter(l)#转换成迭代器
    # print(l1)
    # print(next(l1))#——————转换成迭代器把第一个值取出来

    #装饰器:本质就是函数;功能:为其他函数添加附加功能
    #原则:1、不修改被修饰函数的源代码 2、不修改被修饰函数的调用方式

    #统计函数的时间
    # import time#添加个时间模块
    # def test(l):
    # start_time=time.time()#开始时间
    # res=0
    # for i in l:
    # time.sleep(0.1)#让函数睡0.1秒
    # res+=i
    # stop_time=time.time()#停止时间
    # print("运行时间函数时间 %s" %(stop_time-start_time))
    # return res
    # print(test(range(100)))

    #装饰器的好处:就是解决已经在运行的函数添加功能,不可能把之前的函数拿出从新搞,避免其他地方在应用


    #演示的装饰器-------------------运行有问题等修改
    import time#添加个时间模块
    #使用装饰器来修饰下面求值的函数
    # def time(fun):
    # def wapper(*args,**kwargs):
    # start_time=time.time()
    # res=fun(*args,**kwargs)
    # stop_time=time.time()
    # print("函数运行时间 %s" %(stop_time-start_time))
    # return res
    # return wapper
    #
    # #函数求职
    # @time
    # def test(l):
    # res=0
    # for i in l:
    # time.sleep(0.1)#让函数睡0.1秒
    # res+=i
    # return res
    # print(test(range(20)))

    #装饰器知识储备:装饰器=高级函数+函数嵌套+闭包

    #高级函数:1、函数接收的参数是一个函数名;2、函数的返回值是一个函数。只要满足1或2任意一个条件都可以称之为高级函数

    # def foo():
    # print("您好foo")
    #
    # #这个是高级函数
    # def test(fun):
    # print(fun)
    # fun()#执行运行结果
    # test(foo)

    # #求foo的运行时间,但是以下方法实现了没有修改原函数就实现求值,但是修改了调用函数的方式
    # import time
    # def foo():
    # time.sleep(0.1)
    # print("您好foo")
    #
    # #这个是高级函数,参数是函数名的方式
    # def test(fun):
    # print(fun)
    # start_time=time.time()
    # fun()#执行运行结果
    # stop_time=time.time()
    # print("foo运行时间 %s" %(stop_time-start_time))
    # test(foo)#正确的方式是直接foo()执行,但是我这使用了test(foo),修改了函数的调用方式



    #使用高级函数:返回值和参数都是函数
    # def foo():
    # print("函数 foo")
    #
    # def test(fun):
    # return fun
    #
    # res=test(foo)#拿到地址
    # res()#直接运行


    # #实现不改调用函数方式
    # def foo():
    # print("函数 foo")
    #
    # def test(fun):
    # return fun
    # foo=test(foo)#在赋值给foo
    # foo()#调用方式还是foo()


    #统计foo运行时间,不修改foo原代码,不修改foo的调用方式

    #多运行一次了,失败的列子
    # import time
    # def foo():
    # time.sleep(3)
    # print("来自 foo")
    #
    # def time1(fun):
    # start_time=time.time()
    # fun()#执行运行结果
    # stop_time=time.time()
    # print("foo运行时间 %s" %(stop_time-start_time))
    # return fun
    #
    # foo=time1(foo)
    # foo()#结果:来自 foo foo运行时间 3.000626564025879 来自 foo

    #总结:上面应用了高级函数,但是实现不了装饰器



    #总结:1、使用传入参数是函数时,没有修改原来函数,但是修改了调用方式。
    # 2、使用返回值是函数时,不修改调用方式
  • 相关阅读:
    IDEA中Spring Boot项目MyBaits提示Invalid bound statement (not found)错误
    js 算法 两个数组比较去重,性能优化
    window.open() 打开新标签,之前的sessionStorage还在
    自定义<el-table-column> 数据格式:数组对象,且每条对象中有一个数组对象
    VSCode 代码格式化 快捷键
    echarts的饼图label标签重叠解决办法
    vue打包 element-icons.woff 和element-icons.ttf 字体文件路径错误,导致icon图标显示成小方块的问题。
    vue中的$refs属性几个注意点
    js中的 || 与 && 运算符详解
    package.json与package-lock.json文件是干什么用的?
  • 原文地址:https://www.cnblogs.com/jianchixuexu/p/11605370.html
Copyright © 2020-2023  润新知