python中@符号实例详解

 更新时间:2022年12月20日 07:46:59   作者:ningqingzy  
@是一个装饰器,针对函数,起调用传参的作用,下面这篇文章主要给大家介绍了关于python中@符号的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

python中@是什么意思

通常我们所见的@符号是用于邮箱中,而在python中@符号也有着重要的作用:一个是表示修饰符,另一个则是表示矩阵乘法(不常用)。表示修饰符时,可以在模块或者类的定义层内对函数进行修饰。虽然表示矩阵乘法不常用,但是也是很好的一个方法。值得注意的是@符号的这两种含义,都是在python3.5以后的。

一、表示修饰符

用做函数的修饰符,可以在模块或者类的定义层内对函数进行修饰;

出现在函数定义的前一行,不允许和函数定义在同一行。

一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名函数或其他可调用的东西(如果返回不是一个可调用的对象那么会报错)。

#Example 1
def test(func):
    print("a")
    return func()
    
@test     #从这里可以看出@test等价于 test(xxx())
def xxx():
    print('Hello world!')

运行结果:

a
Hello world!

可以看出,先执行test()下的print(“a”),再return func()即返回xxx()函数

那么,如果前后连续出现两个及以上的@修饰器呢?处理的顺序如何?看下面的例子:

#Example 2
def FA(fn):
    def warp():
        return "<a>"+fn()+"<a>"
    return warp
def FB(fn):
    def warp():
        return "<b>"+fn()+"<b>"
    return warp
    
@FA         #相当于makebold(test1),也就是把当前函数作为入参传过去
def test1():
    return "test1"
 
@FB
def test2():
    return "test2"
    
@FA
@FB
def test3():     #函数和装饰器是倒着执行的,从下往上,从内而外,一层层执行
    return "test3"
    
print(test1())
print(test2())
print(test3())

运行结果:

<a>test1<a>
<b>test2<b>
<a><b>test3<b><a>

以上结果可以看出,函数前面有两个及以上装饰器时,先执行函数,返回的值作为参数传入上一层即FA(),FA()返回的值传入FB(),最终得到FB()返回的值。

二、表示矩阵乘法

#Example 3
class Mat(list):
    def __matmul__(self, B):
        A = self
        return Mat([[sum(A[i][k]*B[k][j] for k in range(len(B)))
                    for j in range(len(B[0])) ] for i in range(len(A))])
A = Mat([[1,3],[7,5]])
B = Mat([[6,8],[4,2]])
print(A @ B)

运行结果:

[[18, 14], [62, 66]]

总结 

到此这篇关于python中@符号实例详解的文章就介绍到这了,更多相关python中@详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中update()函数的使用方法

    python中update()函数的使用方法

    Python字典update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中,这篇文章主要给大家介绍了关于python中update()函数的使用方法,需要的朋友可以参考下
    2024-02-02
  • 详解python3中用HTMLTestRunner.py报ImportError: No module named ''StringIO''如何解决

    详解python3中用HTMLTestRunner.py报ImportError: No module named ''

    这篇文章主要介绍了详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决,感兴趣的可以了解一下
    2019-08-08
  • 浅析Python中的多重继承

    浅析Python中的多重继承

    这篇文章主要介绍了Python中的多重继承,是Python学习中的基本知识,代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • Python第三方库OS库方法实操

    Python第三方库OS库方法实操

    这篇文章主要给大家介绍了关于Python第三方库OS库的相关资料,os库主要是对文件和文件夹进行操作,在Python中对⽂件和⽂件夹的操作要借助os模块⾥⾯的相关功能,需要的朋友可以参考下
    2024-06-06
  • Python绘制3D曲面图的示例代码

    Python绘制3D曲面图的示例代码

    Python提供了多种库和工具,使得创建和定制3D曲面图变得简单,本文将介绍如何使用Matplotlib和mpl_toolkits.mplot3d库绘制3D曲面图,感兴趣的可以了解下
    2024-04-04
  • 对python中return和print的一些理解

    对python中return和print的一些理解

    最近看到视频中讲到python中的print和return的区别,感到一些迷惑,所以自己上手实践了一把,下面这篇文章主要给大家介绍了关于对python中return和print的一些理解,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • Python EOL while scanning string literal问题解决方法

    Python EOL while scanning string literal问题解决方法

    这篇文章主要介绍了Python EOL while scanning string literal问题解决方法,本文总结出是数据库数据出现问题导致这个问题,需要的朋友可以参考下
    2015-04-04
  • 一条命令解决mac版本python IDLE不能输入中文问题

    一条命令解决mac版本python IDLE不能输入中文问题

    本文通过一条命令帮助大家解决mac版本python IDLE无法输入中文问题,需要的朋友可以参考下
    2018-05-05
  • python 实现mysql自动增删分区的方法

    python 实现mysql自动增删分区的方法

    这篇文章主要介绍了python 实现mysql自动增删分区的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python学习之os包使用教程详解

    Python学习之os包使用教程详解

    本文将详细介绍python的内置包——OS 包。OS 包拥有着普遍的操作系统功能,拥有着各种各样的函数来操作系统的驱动功能。快来跟随小编一起学习一下OS包的使用方法吧
    2022-03-03

最新评论