鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 网络程序脚本 > python > >

python中?@的含义以及基本使用方法

来源:互联网 作者:佚名 时间:2022-05-14 12:13
目录 一、表示修饰符。 二、表示矩阵乘法。 总结 一、表示修饰符。 可以在模块或者类的定义层内对函数进行修饰。出现在函数定义的前一行,不允许和函数定义在同一行。 一个修饰
目录
  • 一、表示修饰符。
  • 二、表示矩阵乘法。
  • 总结

一、表示修饰符。

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

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

例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中@用法内容请搜索鸿网互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持鸿网互联!

【来源:国外高防服务器 http://www.558idc.com/stgf.html 欢迎留下您的宝贵建议】
上一篇:Python&nbsp;JSON模块的使用详情
下一篇:没有了
网友评论
<