Python中的“ @”

2023-10-31

一、介绍

这是Python装饰器的语法,使用@符号,表示将装饰器函数放在被装饰函数的上方。当调用被装饰函数时,实际上是调用了装饰器函数,装饰器函数可以在调用被装饰函数之前或之后执行一些额外的操作。

#funA 作为装饰器函数
def funA(fn):
    #...
    fn() # 执行传入的fn参数
    #...
    return '...'

@funA
def funB():

实际上,上面程序完全等价于下面的程序: 

def funA(fn):
    #...
    fn() # 执行传入的fn参数
    #...
    return '...'

def funB():
    #...
funB = funA(funB)

二、实例

定义一个装饰器

def decorator_function(original_function):
    def wrapper_function():
        print("装饰器函数执行前的操作")
        original_function()
        print("装饰器函数执行后的操作")
    return wrapper_function

@decorator_function
def hello():
    print("Hello, World!")

hello()

 

 如果去掉被装饰函数的调用

def decorator_function(original_function):
    def wrapper_function():
        print("装饰器函数执行前的操作")
        # original_function()
        print("装饰器函数执行后的操作")
    return wrapper_function

@decorator_function
def hello():
    print("Hello, World!")

hello()

 

是不是很奇怪为什么没打印hello, world!

因为它等于以下代码

def decorator_function(original_function):
    def wrapper_function():
        print("装饰器函数执行前的操作")
        # original_function()
        print("装饰器函数执行后的操作")
    return wrapper_function


def hello():
    print("Hello, World!")

hello = decorator_function(hello)

hello()

参考:

 Python中的“ @”(@)符号有什么作用?_p15097962069的博客-CSDN博客

https://www.cnblogs.com/satire/p/15112770.html 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python中的“ @” 的相关文章

  • 与 iexact 一起使用时,Django get_or_create 无法设置字段

    我想用name iexact with get or create尽可能避免用户输入字段的重复 我的提供者模型有一个名称字段 我在其中使用get or create 查找工作正常 但在第一次创建实例时 如下面的 p1 Timber 示例 名
  • PyList_SetItem 与 PyList_SETITEM

    据我所知 PyList SetItem 和 PyList SETITEM 之间的区别在于 PyList SetItem 会降低它覆盖的列表项的引用计数 而 PyList SETITEM 不会 我有什么理由不应该一直使用 PyList Set
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • python导入模块时如何避免一直写模块名?

    我用math最近模块很多 我不想写math sqrt x and math sin x 每时每刻 我想缩短它并写sqrt x and sin x How 对于较长的模块名称 通常会缩短它们 例如 import numpy as np 然后您
  • 为什么我不能使用“exclude”从 python 轮子中排除“tests”目录?

    考虑以下包结构 与以下setup py内容 from setuptools import setup find packages setup name dfl client packages find packages exclude te
  • 编辑 scikit-learn 决策树

    我想编辑 sklearn DecisionTree 例如改变条件或切割节点 叶子等 但似乎没有功能可以做到这一点 如果我可以导出到文件 编辑它以导入 如何编辑决策树 环境 Windows 10 python3 3 sklearn 0 17
  • KFold 和 ShuffleSplit CV 有什么区别?

    看起来 KFold 每次迭代对象时都会生成相同的值 而 Shuffle Split 每次都会生成不同的索引 它是否正确 如果是这样 其中一个相对于另一个有什么用处 cv cross validation KFold 10 n folds 2
  • Python 在 chroot 中运行时出现错误

    我尝试在 chroot 中运行一些 Python 程序 但出现以下错误 Could not find platform independent libraries
  • Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

    我有包含字符的 ascii 字符串 x80 代表欧元符号 gt gt gt print x80 当将包含该字符的字符串数据插入数据库时 我得到 psycopg2 DataError invalid byte sequence for enc
  • Python的reduce()短路了吗?

    If I do result reduce operator and False 1000 得到第一个结果后它会停止吗 自从False anything False 相似地 result reduce operator or True 10
  • 将 API 数据存储到 DataFrame 中

    我正在运行 Python 脚本来从 Interactive Brokers API 收集金融市场数据 连接到API后 终端打印出请求的历史数据 如何将数据保存到数据帧中而不是在终端中流式传输 from ibapi wrapper impor
  • conda 无法从 yml 创建环境

    我尝试运行下面的代码来从 YAML 文件创建虚拟 Python 环境 我在 Ubuntu 服务器上的命令行中运行代码 虚拟环境名为 py36 当我运行下面的代码时 我收到下面的消息 环境也没有被创建 这个问题是因为我有几个必须使用 pip
  • Pyspark 数据框逐行空列列表

    我有一个 Spark 数据框 我想创建一个新列 其中包含每行中具有 null 的列名称 例如 原始数据框是 col 1 col 2 col 3 62 45 null 62 49 56 45 null null null null null
  • Django 的 URL 覆盖率测试为 0%,为什么?

    使用姜戈鼻子 我对 URL 进行了测试 但 URL 覆盖率仍然为 0 为什么 python manage py 测试配置文件 这是我的报道 Name Stmts Miss Cover Missing profiles 0 0 100 pro
  • 在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件? [复制]

    这个问题在这里已经有答案了 Flask 的 hello world 演示是 from flask import Flask app Flask name app route def hello return Hello World if n
  • 如何强制 Y 轴仅使用整数

    我正在使用 matplotlib pyplot 模块绘制直方图 我想知道如何强制 y 轴标签仅显示整数 例如 0 1 2 3 等 而不显示小数 例如 0 0 5 1 1 5 2 等 我正在查看指导说明并怀疑答案就在附近matplotlib
  • 如何设置 matplotlib 表中列的背景颜色

    我在一个目录中有多个 txt 文件 例如 d memdump 0 txt 1 txt 10 txt 示例文本文件如下 Applications Memory Usage kB Uptime 7857410 Realtime 7857410
  • SQLAlchemy:避免声明式样式类定义中的重复

    我正在使用 SQLAlchemy 并且我的对象模型中的许多类具有相同的两个属性 id 和 整数和主键 以及名称 字符串 我试图避免在每个类中声明它们 如下所示 class C1 declarative base id Column Inte
  • 获取调用者文件的绝对路径

    假设我在不同的目录中有两个文件 1 py 比如说 在C FIRST FOLDER 1 py and 2 py 比如说 在C SECOND FOLDER 2 py 文件1 py进口2 py using sys path insert 0 pa
  • 在游戏中实现功能

    我在完成这部分作业时遇到了麻烦 我必须宣布游戏的获胜者 然后输入到函数中 输入所有 if 语句后 我必须创建一个函数def playGame 这必须包括 showRules user getUserChoice computer getCo

随机推荐

  • 结构体与共用体(联合体)

    参考 结构体与共用体 作者 一只青木呀 发布时间 2020 08 09 08 29 22 网址 https blog csdn net weixin 45309916 article details 107889394 参考 联合体 uni
  • 多线程下载

    原理 服务器cpu分配给每条线程的时间片是相同的 服务器带宽平均分配给每个线程 所以客户端开启的线程越多就能抢占到更多的服务器资源 用java实现 public class NultiDownload static String path
  • MySQL多表关系及多表查询

    多表关系 在关系型数据库中存在着三种多表关系 分别是一对多 多对一 多对多以及一对一 之所以会产生这些关系 是因为在进行数据设计的时候 分析得出业务之间存在着一定的关系 进而在数据中也就存在了这些关系 一对多 一对多是最基础的表间关系 意思
  • 给大家推荐一门比较适合用来学习流量分析技术的公开课(内附课程b站链接)

    最近看到同事在看一门课程 是CSNA出的一套免费对外公开课 跟着看了一下觉得不错 分享给大家 CSNA是国内比较老牌且低调的网络技术分析认证培训了 在网络运维和网络安全方向上还是有口皆碑的 课程内容比较体系化 有理论也有实操 涵盖了业务性能
  • php面试题猴子123报数(猴子选大王)

    题目就是有N个猴子 123循环报数数到3的猴子被踢出下一个接着报数 一遍一遍的循环直到剩余一个猴子 求这个猴子是最开始的第几号猴子 我想到了两个方法 第一个就是模拟报数的模式 每到3的时候unset一个元素 最后剩余的就是 要求的猴子 代码
  • windows如何关闭IIS (因为占用80端口而无法启动nginx)

    一 场景概述 正在写一个Web项目但是每次输入都需要加上端口号 所以想用服务器代理一下端口 让可以直接用nginx来解决这个问题但是 nginx异常无法打开 结果发现80端口被异常占用 因为windows的IIS也占用80端口号 比如win
  • 电脑命令教程计算机基础知识,电脑常用运行命令图文教程(DOS命令)

    本文介绍一些常用的运行窗口命令 也是DOS命令 同时所有的命令均在win7旗舰版测试通过 并附有运行后的图片 运行命令窗口如下 工具 原料 电脑一台 本文以win7系统的电脑为例 方法 步骤 1 调出运行命令窗口 按快捷键 win R 或者
  • java|8.18总结|基本功能

    1 思维导图 2 用自己的话描述某知识点是什么 举例 总结 一句话总结 环境变量 理解 环境变量相当于提前封装好一个环境 功能 在此环境下 比如在有path环境下 可以直接执行java文件 不用先进入JAVA的目录才能运行java 如果需要
  • 使用Docker安装配置Jupyter并配置R语言与Python环境

    文章目录 Docker docker的安装 将当前用户添加到docker用户组 拉取一个镜像 创建配置目录 启动docker服务 登录jupyter容器 安装vim 更换源 JupyterNotebook 设置python 安装Jupyte
  • 【burpsuite安全练兵场-服务端6】信息泄露漏洞-5个实验(全)

    前言 介绍 博主 网络安全领域狂热爱好者 承诺在CSDN永久无偿分享文章 殊荣 CSDN网络安全领域优质创作者 2022年双十一业务安全保卫战 某厂第一名 某厂特邀数字业务安全研究员 edusrc高白帽 vulfocus 攻防世界等平台排名
  • Vue中常用基础标签

    创建一个Vue实例 var vm new Vue el app data methods 在html中完整代码
  • 练习2-2 在不使用运算符&&或者

    1 for i 0 i lt lim 1 c getchar n c EOF i 2 s i c 3 4 5 while i lt lim 1 6 7 while c getchar EOF 8 9 while c getchar n 10
  • c语言基础总结之获取数组中元素最小值

    数组获取元素个数 sizeof ids sizeof int 需要根据字节的长度来计算个数 当然在java中直接 length来获取 c语言就是比较麻烦 毕竟java是封装语言 将繁杂的步骤分装好方便调用了 用随机数生成一个数组 写一个函数
  • Anaconda的安装与jupyter常用操作

    一 Anaconda的安装 关于Anaconda的在windows上的安装 我不做过多的赘述 大家可以参考博客 https ask hellobi com blog wangdawei 9786 这里 需要说明一下为什么选择Anaconda
  • 在虚拟机Docker安装MySQL8.0,Navicat连接数据库出错等踩过的坑

    Docker安装MySQL8 0 Navicat连接数据库 环境 虚拟机 CentOS 7 2 Docker 20 10 7 MySQL 8 0 27 安装MySQL 1 先创建两个MySQL使用文件夹 opt目录是Linux提供我们扩展的
  • 顺序表的定义和基本操作

    文章目录 顺序表的实现 静态分配 动态分配 顺序表的插入删除 顺序表的查找 总结 顺序表的实现 静态分配 include
  • 【C++入门】(拷贝)构造函数和析构函数

    1 构造函数和析构函数 1 构造函数 constructor 字面意思就是构造对象的函数 当我们定义类的对象时调用 可以帮我们完成对象的初始化 2 析构函数 destructor 可以看做是构造函数的逆过程 当销毁类的时候调用 做一些收尾的
  • 华为笔试面试机考

    学习目标 HJ2 计算某字符出现次数 学习内容 描述 写出一个程序 接受一个由字母 数字和空格组成的字符串 和一个字符 然后输出输入字符串中该字符的出现次数 不区分大小写字母 数据范围 1 n 1000 输入描述 第一行输入一个由字母和数字
  • DevOps教程:DevOps 架构

    注 本文译自 https www javatpoint com devops architecture 为了交付应用程序 开发和运营都扮演着至关重要的角色 部署包括需求分析 设计 开发以及软件组件或框架的测试 运营包括软件的管理流程 服务和
  • Python中的“ @”

    一 介绍 这是Python装饰器的语法 使用 符号 表示将装饰器函数放在被装饰函数的上方 当调用被装饰函数时 实际上是调用了装饰器函数 装饰器函数可以在调用被装饰函数之前或之后执行一些额外的操作 funA 作为装饰器函数 def funA