问询Python函数中*与省略号的含义及PyTorch对应函数源码查看方法
语法含义解释
1. 函数参数中的*
这个是Python的关键字-only参数分隔符,作用是强制要求*之后的所有参数,在调用函数时必须以关键字参数的形式传参,不能使用位置参数传参。
举个实际调用的例子,你提到的round函数只能按以下规则调用:
out_tensor = torch.randn(3) a = torch.tensor(1.2) # 正确写法,out必须显式指定参数名 torch.round(a, out=out_tensor)
如果写成torch.round(a, out_tensor)就会触发语法错误,该设计可以避免参数位置传错的问题。
2. 函数末尾的...
这个写法通常出现在PyTorch的类型桩文件(.pyi后缀)中,这类文件只用来声明函数的类型签名(包括参数类型、返回值类型),不会存放具体实现逻辑。
另外PyTorch大量核心算子是用C实现的,Python层面只暴露绑定后的接口,所以接口定义处也会用...代替具体函数体,说明实现在底层C代码中。
查看函数完整实现的方法
- 如果是Python层实现的工具函数,可以直接用Python内置的
inspect模块获取源码,示例代码:import inspect import torch # 传入你要查询的函数即可 print(inspect.getsource(torch.xxx)) - 如果是C实现的核心算子(调用inspect报错的基本都属于这类),可以去PyTorch官方GitHub仓库对应版本的代码中查找:
大部分算子的实现都存放在aten/src/ATen/native目录下,按算子功能分类存放;Python和C的绑定逻辑可以在torch/csrc目录下搜索对应函数名查找。
内容的提问来源于stack exchange,提问作者W Dayu
相关产品推荐
相关产品推荐

