栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python基础

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python基础

Python基础 一个关于Python内在语法的问题
import torch
from torch import nn

m = nn.Linear(20, 30)
input = torch.randn(128, 20)
output = m(input)

m是一个对象,这里为什么直接对一个对象传入参数呢??
这里为什么感觉对象和方法一样呢??
原因在这里:

所以对一个对象加括号相当于调用了object.call()函数,括号中还可以加参数
下面是一个示例:

class Product:
    def __init__(self):
        print("Instance Created")
  
    # Defining __call__ method
    def __call__(self, a, b):
        print(a * b)
  
# Instance created
ans = Product()
#类实例化的时候要给类名加括号
  
# __call__ method will be called
ans(10, 20)

output:
Instance Created
200
下面再看一下torch源码:

相当于__call__和后面的函数等价

在这里做判断,满足条件时调用forward函数,这也就是为什么对一个对象可以直接输入tensor得到结果

学习过程中没注意到的语法
  • 魔术方法
    在Python中,所有以双下划线__包起来的方法,统称为Magic Method(魔术方法),它是一种的特殊方法,普通方法需要调用,而魔术方法不需要调用就可以自动执行。
    魔术方法在类或对象的某些事件出发后会自动执行,让类具有神奇的“魔力”。如果希望根据自己的程序定制自己特殊功能的类,那么就需要对这些方法进行重写。

"call"魔术方法其实命名已经很显然了,就是调用对象的时候调用;
就像init是初始化对象的时候调用

__len__(self)                  定义当被 len() 调用时的行为(返回容器中元素的个数)
__getitem__(self, key)         定义获取容器中指定元素的行为,相当于 self[key]
__setitem__(self, key, value)  定义设置容器中指定元素的行为,相当于 self[key] = value
__delitem__(self, key)         定义删除容器中指定元素的行为,相当于 del self[key]
__iter__(self)                 定义当迭代容器中的元素的行为
__reversed__(self)             定义当被 reversed() 调用时的行为
__contains__(self, item)       定义当使用成员测试运算符(in 或 not in)时的行为

python中能len,contains的对象,一定都有相应的魔术方法,也就是说只有定义了这些魔术方法,才能用len等

  • 再一个就是继承,overload和其他

  • 参数中**的含义

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/313977.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号