python中@符号实例详解
ningqingzy 人气:0python中@是什么意思
通常我们所见的@符号是用于邮箱中,而在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]]
总结
加载全部内容