目录
  • 一、表示修饰符。
  • 二、表示矩阵乘法。
  • 总结

一、表示修饰符。

可以在模块或者类的定义层内对函数进行修饰。出现在函数定义的前一行,不允许和函数定义在同一行。

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

例1:

def funa(desa):
 print("it's funa")
 
def funb(desb):
 print("it's funb")
 
@funa
def func():
 print("it's func")

运行结果:

it’s funa

例2:

可以看出,该例子中@test等价于 test(xxx()),但是这种写法你得考虑python代码的执行顺序。

def test(func):
    print("a")
    return func()
    
@test
def xxx():
    print('hello world!')

运行结果:

a

hello world!

例3:

为更深刻理解该用法,来个复杂点的嵌套型。

def funa(desa):
 print("it's funa")
 
 print('---')
 print(desa)
 desa()
 print('---')
 
def funb(desb):
 print("it's funb")
 
@funb
@funa
def func():
 print("it's func")

运行结果:

it’s funa

<function func at 0x00000252d2545550>

it’s func

it’s funb

解析:

  1. @funb 修饰装饰器@funa,@funa 修饰函数定义def func(),将func()作为funa()的参数,再将funa(func())作为funb()的参数。 执行的时候由上而下,先执行funa(func()),再执行funb(funa(func()))。注意,func()并不执行,除非funa()函数中给出了执行funa()的代码。
  2. 打印desa,其传的是func()的地址,即desa现在为函数desa()。 执行desa()即执行func(),desa=desa()=func()。

二、表示矩阵乘法。

        不常用。

例:

import torch
 
n=100
x = torch.ones(n,2)
x[:,0].uniform_(-1.,1)  # 第一列变换至(-1.,1) 之间
print(x[:5])  # 输出前5行
a = torch.tensor([3.,2.]) # 一维tensor
print(a)
print(a.shape)
y = x@a
print(y)
print(y.shape)

输出结果:

tensor([[ 0.8230,  1.0000],

        [ 0.2427,  1.0000],

        [-0.7416,  1.0000],

        [-0.1267,  1.0000],

        [ 0.7767,  1.0000]])

tensor([3., 2.])

torch.size([2])

tensor([ 4.4691,  2.7281, -0.2249,  1.6198,  4.3302,  3.3386,  1.9908, -0.8602,

         4.9401,  1.9773,  4.5304, -0.1322,  3.9059, -0.6714,  1.8961,  3.7886,

         0.8241,  4.4958,  2.2765,  2.0459,  3.6542,  3.0824,  2.8941,  1.0526,

         4.8735,  1.4954,  3.0208,  4.0778,  2.3491,  2.2261,  3.1072,  1.0640,

         1.7861, -0.8534,  3.2532,  1.5553,  0.2124,  3.6449,  1.6078, -0.1138,

         4.2842,  3.7184,  2.2547,  3.4069,  3.6274,  0.4879,  1.4638,  3.9289,

         3.3475,  4.1895,  1.5572,  0.8312,  2.9297, -0.9266,  0.4067,  2.5237,

         0.6808,  4.9553,  3.3838,  0.5514,  4.8429,  0.0513,  3.4206,  0.3634,

         4.7817,  3.0385,  2.3276, -0.0794,  3.4981,  4.3776, -0.8681, -0.4573,

         3.6906,  1.2463,  1.4817,  4.0007,  4.7871,  2.5638,  4.2755,  3.1731,

         3.4726,  2.1015, -0.8896,  1.4156,  1.2603,  4.0047,  3.3631,  3.5998,

         3.2414, -0.1534,  3.6266,  0.3750,  4.4118, -0.0199,  1.6172,  3.2992,

        -0.2325,  1.8240,  0.5580,  2.1420])

torch.size([100])

总结

到此这篇关于python中@的含义以及基本使用方法的文章就介绍到这了,更多相关python中@用法内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!