NumPy sin函数中*参数的作用及额外参数存在原因咨询
关于NumPy中
sin函数参数里*的作用及广泛使用原因 先给出NumPy官方文档里sin函数的定义:
numpy.sin(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'sin'>
一、out=None后*的作用
这个单独的*是Python的语法特性,用来标记关键字-only参数的起始位置。意思是:*之后的所有参数,调用函数时必须通过指定参数名的方式传递,绝对不能用位置参数的形式传值。
举个实际的例子:
import numpy as np # 正确调用:*后的where用关键字传递 result = np.sin(np.pi/2, out=np.empty(1), where=True)
而下面这种写法会直接报错:
# 错误:where是关键字-only参数,不能用位置传递 result = np.sin(np.pi/2, None, True)
二、NumPy大量使用这种参数的原因
- 保障API向后兼容:NumPy的函数会持续迭代更新,经常需要添加新的可选参数。把新增参数放在
*之后的关键字-only区域,老代码里用位置传参的调用方式不会被破坏——比如原来用户习惯np.sin(x, out=my_arr),后续新增where参数后,老代码不需要修改就能正常运行,不会因为参数位置变化而出错。 - 减少参数误用:NumPy的通用函数(ufunc)通常有很多可选参数,功能细节复杂。强制这些参数用关键字传递,能让代码可读性更高,开发者一眼就能看出每个参数的作用,避免因为位置传参搞混参数含义(比如把
casting和order的位置搞反)。 - 遵循Python语言规范:Python 3正式引入了关键字-only参数的语法,这种设计被视为编写清晰、健壮API的最佳实践。NumPy跟进这个规范,让自身API更符合Python开发者的使用习惯,降低学习成本。
内容的提问来源于stack exchange,提问作者Basil Karol
相关产品推荐
相关产品推荐

