美文网首页
python编程基础25-闭包函数与装饰器

python编程基础25-闭包函数与装饰器

作者: 疯子李 | 来源:发表于2023-12-24 00:17 被阅读0次
# -*- coding: utf-8 -*-
# @Time    : 2023/4/25 21:16
# @Author  : yanfa
# @user   : yanfa 
# @File    : closure_functions_and_decorators.py
# @remark:闭包函数与装饰器
""""""
import time

"""一、函数引用
函数可以被引用,函数可以被赋值给一个变量
"""
# def hog():
#     print(hog)
# print(hog) #是一个函数对象 <function hog at 0x101032280>
#
# harry=hog #把函数对象赋值给一个变量
# print(harry)  #<function hog at 0x100876280>

"""二、闭包函数
闭包的内部函数中,对外部作用域的变量进行引用
闭包无法修改外部函数的局部变量
闭包可以保存当前的运行环境"""

# def output(grade):
#     def inner(name,gender):
#         print(f"开学啦,姓名是{name},性别是{gender},年级是{grade}") #闭包的内部函数中,对外部作用域的变量进行引用
#     return inner
#
# student=output(1) #闭包可以保存当前的运行环境,grade声明了下面就不用重复声明
# student("张三","男") #开学啦,姓名是张三,性别是男,年级是1
# student("李四","女")
# student("王五","男")

#闭包无法修改外部函数的局部变量
# def output(grade):
#     grade="2"
#     print(f"外函数的年级:{grade}")
#     def inner(name,gender):
#         grade = "1"
#         print(f"内函数的年级:{grade}")
#     return inner
#
# student=output(1) #外函数的年级:2 \n 内函数的年级:1
"""为什么要学习装饰器
行业需求:涉及python技术栈,面试常见题
使用需求:优化代码的可读性,可维护性"""
"""三、装饰器"""
#需求:函数体执行开始和结束打印信息
#第一:没封装时,代码冗余
# def hog():
#     print("霍格沃滋学社")
# def hog2():
#     print("霍格沃滋学社2")
# print("函数开始执行")
# hog()
# print("函数结束执行")
#
# print("函数开始执行")
# hog2()
# print("函数结束执行")

#第二:优化,封装成函数,入参是函数对象func---但是难以理解
# def hog():
#     print("霍格沃滋学社")
# def hog2():
#     print("霍格沃滋学社2")
# def function_tips(func):
#     print("函数开始执行")
#     func()
#     print("函数结束执行")
#
# function_tips(hog) #函数开始执行\n霍格沃滋学社\n函数结束执行
# function_tips(hog2)

#第三、使用装饰器-更简洁
# 第一步:定义2个函数,外函数,内函数
# 第五步:在装饰器执行过程中,会自动传入一个参数,参数就是被装饰函数的函数对象
# def timer(func):
#     def inner():
#         # 第二步:添加装饰器逻辑
#         print("计时开始")
#         func() #第六步:添加被装饰函数的执行逻辑
#         print("计时结束")
#     # 第三步:把内函数的函数对象return
#     return inner

#第四步:装饰器的使用
# @timer
# def hog():
#     print("学社")
# @timer
# def hog2():
#     print("学社2")
# hog() #计时开始\n学社\n计时结束
# hog2() #计时开始\n学社2\n计时结束

#装饰器实战练习-实现一个计时器的装饰器,计算函数执行时间

# def timer(myfunc):
#     def inner():
#         start=time.time()
#         print(f"开始时间:{start}")
#         myfunc()
#         end=time.time()
#         print(f"结束时间:{end}")
#         diff_time=end-start
#         print(f"执行时间:{diff_time}")
#     return inner
#
# @timer
# def myfunc():
#     print("这是我的函数")
#
# myfunc() #开始时间:xx\n这是我的函数\n开始时间:xx\n执行时间:xx

"""四、装饰带参数函数
使用不定长参数*args,**kwargs"""
def timer(myfunc):
    def inner(*args,**kwargs):
        start=time.time()
        print(f"开始时间:{start}")
        myfunc(*args,**kwargs)
        end=time.time()
        print(f"结束时间:{end}")
        diff_time=end-start
        print(f"执行时间:{diff_time}")
    return inner

@timer
def myfunc(name):
    print(f"这是我的函数{name}")

myfunc("张三") #xxx 这是我的函数张三 xxx

@timer
def myfunc(name,age:int,sex):
    print(f"这是我的函数,姓名为{name},年龄为:{age},性别为:{sex}")

myfunc("张三",18,"男") #xxx 这是我的函数,姓名为张三,年龄为:18,性别为:男 xxx

相关文章

  • Python装饰器与闭包!

    闭包是Python装饰器的基础。要理解闭包,先要了解Python中的变量作用域规则。 变量作用域规则 首先,在函数...

  • python装饰器

    装饰器简述 要理解装饰器需要知道Python高阶函数和python闭包,Python高阶函数可以接受函数作为参数,...

  • 2020-012 python闭包与装饰器

    python闭包与装饰器 闭包 函数和对其周围状态(lexical environment,词法环境)的引用捆绑在...

  • python之理解闭包和装饰器

    python之理解闭包和装饰器 1、闭包函数 1.1 python中函数都是对象 结果: 上面定义一个shut函数...

  • Python装饰器-专题笔记

    学会装饰器,Python更进阶 函数作用域到闭包到装饰器讲解,及闭包和装饰器的运用。 [√] 慕课网Meshare...

  • Python 中的闭包

    外部函数返回内部函数简称闭包。闭包是装饰器的基础,装饰器就是用于改变原来函数状态,方法的函数。因为函数可接受的参数...

  • Python 2 - 高级用法 - 装饰器

    Python 2 - 高级用法 - 装饰器 一谈到 装饰器,就离不开闭包 闭包 闭包就是能够读取其他函数内部变量的...

  • Python 装饰器的诞生过程

    Python中的装饰器是通过利用了函数特性的闭包实现的,所以在讲装饰器之前,我们需要先了解函数特性,以及闭包是怎么...

  • 只需四步,让你了解Python装饰器的诞生过程

    Python中的装饰器是通过利用了函数特性的闭包实现的,所以在讲装饰器之前,我们需要先了解函数特性,以及闭包是怎么...

  • python中的函数

    关于python中的值传递和址传递 匿名函数 缺省函数 闭包 装饰器

网友评论

      本文标题:python编程基础25-闭包函数与装饰器

      本文链接:https://www.haomeiwen.com/subject/gejvgdtx.html