首页 > 编程语言 >python 装饰器

python 装饰器

时间:2023-01-02 16:57:59浏览次数:56  
标签:return 函数 python 123 inner fn 装饰 def

装饰器:本质是一个闭包
作用:在不改变原有函数调用的情况下,给函数增加新的功能

def wrapper(fn):    wrapper: 装饰器, fn: 目标函数
    def inner(*args, **kwargs):
        # 在目标函数执行之前...
        ret = fn(*args, **kwargs) 执行目标函数
        # 在目标函数执行之后...
        return ret
    return inner  # 千万别加小括号

@wrapper
def target():
	pass

# 运行被装饰函数
taget() # =>  inner()


一个函数可以被多个装饰器修饰。
@wrapper1
@wrapper2
def target():
    pass
规则和规律 wrapper1 wrapper2 target wrapper2 wrapper1

示例

def ggg(fn):
    def inner(*args, **kwargs):
        print('开始')
        res = fn(*args)
        print('结束')
        return res 
    return inner 

@ggg
def func(user, passw):
    print(f'账户登录 {user}: {passw}')
    return '123'


print(func('zhangsan', 123))
'''
解析:
运行fun c('zhangsan', 123)时,先调用ggg(@表示要先进去后面函数),进而ggg返回inner,即func表示为inner,进一步调用inner。
'''

输出:

开始
账户登录 zhangsan: 123
结束
123

更多:

标签:return,函数,python,123,inner,fn,装饰,def
From: https://www.cnblogs.com/vaughnhuang/p/17020137.html

相关文章

  • Python类与对象详解
    一、类和对象类的意思:种类、分类、类别对象是特征与技能的结合体,我可能有身高体重、而你也有身高体重,所以你会说你像我,但是你一定不会说你像阿猫阿狗。并且我和你其实就......
  • Python重用父类方法
    一、重用父类方法1与继承没有关系的重用指名道姓的使用在子类里想用父类的方法,我们可以直接用父类名.方法名()--->父类里方法有几个参数就传几个参数我们看起来......
  • Linux下更新Python版本
    参考:安装图形化配置解析工具_LiteOS_编译和开发工具_Linux下的编译_搭建Linux编译环境_华为云(huaweicloud.com)系统:Centos7$uname-aLinuxlocalhost.localdom......
  • Python类的封装教程
    一、什么是封装封装的本身意思其实就和闭包函数一样,就是把一个函数和变量全都包在一起,但其实这样的说法不是很具体,就是一种很片面的解释二、为什么要封装封装数据的主要......
  • python调用sklearn库实现svr拟合数据
    参考的是b站南方小鱼儿的代码,参考网址:SVR模型对连续量的预测(SVM)02-生成样本数据_哔哩哔哩_bilibili代码如下importnumpyasnpfromsklearn.svmimportSVRimpor......
  • csrf跨站请求CBV添加装饰器的多种方式
    今日内容概要csrf跨站请求伪造csrf相关校验策略CBV添加装饰器的多种方式auth认证模块BBS项目需求分析今日内容详细csrf跨站请求伪造钓鱼网站:模仿一个正规的......
  • /home/software/python/Modules/_ctypes/_ctypes.c:118:17: fatal error: ffi.h: No s
     001、python3.11编译报错/home/software/python/Modules/_ctypes/_ctypes.c:118:17:fatalerror:ffi.h:Nosuchfileordirectory  002、解决方法[root@PC......
  • vscode设置python代码debug(调试) 与带参数调试
    VScode官方调试说明:https://code.visualstudio.com/docs/python/debugging#_set-configuration-options 一、带参数的Debug调试,launch.json文件创建来源1.新建p......
  • GitHub 上 25 个 Python 学习资源,墙裂推荐!
    “阅读本文大概需要7分钟。”英文:thecarrots根据2020年StackOverflow开发者调查报告,Python是世界上最受欢迎的语言之一,排名仅次于Rust和TypeScript。更令人惊讶的......
  • Python - 情景管理器
    defmy_function():logging.debug('Somedebugdata')logging.error('Errorloghere')logging.debug('Moredebugdata')有这样一个函数,它的默认日志级......