python 装饰器

这篇具有很好参考价值的文章主要介绍了python 装饰器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

装饰器

#装饰器,反复的验证状态,从而判断是否继续下一步。经常用来判断用户的登陆状态。比如flask,他的很多东西都是装饰器
#装饰器依赖闭包

def test():
    print ('>>>text>>>')
#类比  a=10  b=a ,a=0是声明整数  b=a是声明函数。


def alex(t):
    print (t)
    test()
    print ('alex>>>>>alex')
a=test
a()
print ('华丽的分割线')
alex(a)
#装饰器特点:1.函数必须是作为参数传递给另外一个函数、 2.必须要有闭包的特点
#解释器函数规则
#作用域  LEGB
#L ;locale,比如定义了一个函数,再调用一个函数时,他会先在这个定义的域名内找
#E ;嵌套,如果没找到,他会去找外面嵌套他的那一层有没有
#G: global,如果还没有,他会找全局变量中有没有
#B : built-in,如果还没有,他会找内置函数有没有。如果内置还找不到就报错了
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/9
#定义一个装饰器
import time
def decorate(func):
    a=100
    print ('wrapper 打印测试')
    def wrapper():
        func()
        print ('刷漆')
        print ('铺地板')
    print ('正在校验')
    print ('wrapper 加载完成')
    time.sleep(2)
    print ('校验完成')
#调用原函数
    func()
    return wrapper

#使用装饰器
@decorate
def hourse():
    print ('---f1---')
hourse()

#在@在谁上面,谁就是被装饰函数。hourse是被装饰函数
#步骤
# 1;看到@,hourse被定义是被装饰函数。
# 2将被装饰函数作为参数传给decorate
# 3,执行decorate函数。
# 4.将返回值赋值给hourse,此时他只是hourse的一层皮,里面其实是wrapper
print (hourse)

hourse()
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/9
#定义一个毛坯房,来了两个装修公司
#如果装饰器是多层,谁离装饰器最近,就优先使用哪个装饰器。

def zhuangxiu1(func):
    print ('>'*20+'1start')
    def wrapper(*args,**kwargs):
        func()
        print ('喷漆')
    print ('>'*20+'1end')
    return wrapper
def zhuangxiu2(func):
    print ('>'*20+'2start')
    def wrapper(*args,**kwargs):
        func()
        print ('装门')
    print ('>'*20+'2end')
    return wrapper
#哪个离着hourse近,他就会先执行哪一个
@zhuangxiu2
@zhuangxiu1
def hourse():
    print ('我是毛坯房')
hourse()
#他会先把装修,把hourse 复制给func.给第一步 func=hourse  ,然后加载wrapper,打印出 1start 1end。然后扔出wrapper,赋值给hourse
#到第二层wrapper,func就是继承了上面第一层的wrapper加载第二层的wrapper,并赋值给hourse,这时候,hourse是第二层的wrapper
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/9
def zhuangxiu1(func):
    def wrapper(*args,**kwargs):
        func(*args,**kwargs)
        print ('铺砖')
    return wrapper

@zhuangxiu1
def hourse(time):
    print ('{}我是毛坯房' .format(time))
hourse('2020-6-12')

#带参数的装饰器是三层的
#最外层的函数接收装饰器参数,第二层接收函数的 第三层,负责接收函数的实参的
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/9
#模拟付款,要随时查询用户是否在线,所以谢一个装饰器
import time
islogin=False
def login():
    user=input('please input user:')
    password=input('please input pass')
    if user=='admin' and password=='123456':
        return True
    else:
        return False
def login_required(func):
    def wrapper(*args,**kwargs):
        global islogin
        if islogin:
            func(*args,**kwargs)
        else:
            #跳转到登录界面
            islogin=login()
            print ('result',islogin)
    return wrapper
@login_required
def pay(money):
    print ('正在付款,付款金额是:{}' .format(money))
    print ('付款中...')
    time.sleep(2)
    print ('付款完成')
pay(1000)
#第一次付款,调用login_requied,发现islogin=False,然后调用login,login后修改了全局变量,
# islogin=True,当再次pay(8000)的时候查到islogin=True,所以会只有8000付款成功
pay(8000)

应用场景

装饰器主要在以下情况下会被使用:

函数扩展:装饰器可以用于扩展函数的功能。通过在函数定义之前使用装饰器,可以在不修改原始函数代码的情况下添加额外的行为或功能。这样可以提高代码的可重用性和可维护性。

认证和授权:装饰器可以用于验证用户身份和权限控制。通过在需要进行身份验证或授权的函数上应用装饰器,可以确保只有经过验证的用户才能执行特定的操作。

缓存:装饰器可以用于实现函数的结果缓存。通过在函数执行前检查缓存并返回缓存结果,可以避免重复计算,提高程序的性能。

日志记录:装饰器可以用于记录函数的调用信息和执行日志。通过在函数执行前后添加日志记录的逻辑,可以方便地追踪函数的调用过程和输出结果,用于调试和分析。

输入验证和数据转换:装饰器可以用于验证函数的输入参数,并进行必要的数据转换或格式化。通过在函数执行前进行输入验证,可以确保函数接收到正确的参数,并在需要时对参数进行预处理。

性能分析:装饰器可以用于测量函数的执行时间和性能指标。通过在函数执行前后记录时间戳,并计算执行时间,可以评估函数的性能,并进行性能优化。

这些只是装饰器的一些常见应用场景,实际上,装饰器非常灵活,可以根据需求进行扩展和定制,以适应各种不同的编程需求。在Python等编程语言中,装饰器被广泛应用于实现各种功能和框架。它们提供了一种优雅而简洁的方式来修改和扩展代码的行为,同时保持代码的可读性和可维护性。

文章来源地址https://www.toymoban.com/news/detail-582685.html

到了这里,关于python 装饰器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 系统学习Python——装饰器:函数装饰器-[添加装饰器参数:基础知识]

    分类目录:《系统学习Python》总目录 前面文章介绍的计时器装饰器有效运行,但是如果它可配置性更强的话,就会更好一一一例如提供一个输出标签并且可以打开或关闭跟踪消息,这些在一个多用途工具中可能很有用。装饰器参数在这里派上了用场:对它们适当编写后,我们

    2024年02月22日
    浏览(36)
  • 【Web前端开发基础】CSS的定位和装饰

    能够说出 定位 的常见应用场景 能够说出 不同定位方式 的特点 能够使用 子绝父相 完成元素水平垂直案例 能够写出三种常见的 光标类型 (cursor) 能够使用 圆角边框 属性完成 正圆 和 胶囊按钮 效果 能够说出 display 和 visibility 让 元素本身隐藏 的区别 2.1 定位 目标:能够说

    2024年01月23日
    浏览(42)
  • Python小知识 - Python装饰器

    Python装饰器 在Python中,装饰器是一个特殊的函数,可以将其他函数包装在装饰器函数中,并且将被包装的函数作为参数传递给装饰器函数。 使用装饰器的好处是可以自动在被包装的函数前后执行一些额外的代码,比如在函数执行前后打印日志,或者在函数执行前后计算函数

    2024年02月09日
    浏览(39)
  • Python中的装饰器详解及实际应用【第120篇—装饰器详解】

    在Python编程中,装饰器(Decorator)是一种强大而灵活的工具,用于修改函数或方法的行为。它们广泛应用于许多Python框架和库,如Flask、Django等。本文将深入探讨装饰器的概念、使用方法,并提供实际应用的代码示例和详细解析。 装饰器是一种特殊的函数,它可以接受一个函

    2024年03月11日
    浏览(50)
  • python装饰器原理 | 常用装饰器使用(@cache, @lru_cache)

    🚀 关于python的装饰器原理介绍可看这里,讲的挺简洁易懂:python装饰器原理 ⭐ 弄懂装饰器原理后,来学学常用装饰器。 也就是一种装饰在被执行的函数上,将其执行的结果缓存起来,当下次请求的时候,如果请求该函数的传参未变则直接返回缓存起来的结果而不再执行函

    2023年04月25日
    浏览(47)
  • python装饰器嵌套基础

    python支持装饰器嵌套,即多个装饰器装饰同一个函数或方法。 用法 描述 @a_deco、@b_deco、@c_deco分别占一行,编写在同一个函数或方法的def语句上方。 从def开始,由近到远,依次执行装饰器@c_deco、@b_deco、@c_deco。 等价于 示例 描述 装饰器的包装函数,比如a_wrapper(),保存接收到

    2024年01月25日
    浏览(37)
  • Python闭包与装饰

    闭包与装饰的本质 一个函数的组成部分可以包含: 变量 函数 类 闭包和装饰的本质: 组成部分中的函数引用了组成部分中的其他变量、函数、参数,return该组成部分函数。 闭包 定义:利用nonlocal声明函数组成部分中的变量,返回组成部分中的函数。 实际使用:定义一个函

    2024年01月17日
    浏览(40)
  • 【Python】闭包 | 装饰器

    在函数嵌套的前提下,内部函数使用到了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。 需要使用 nonlocal 修饰外部函数的变量才可在内部函数中修改它。 闭包注意事项 优点 无需定义全局变量即可实现通过函数,

    2024年02月09日
    浏览(35)
  • python 装饰器

    应用场景

    2024年02月17日
    浏览(28)
  • Python初步了解装饰器

    装饰器的概念 装饰器的简单使用 装饰器的进阶 装饰器的练习 装饰器的固定模块 装饰器的语法糖

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包