PyCharm中numpy.arange为何存在两种不同的函数签名展示样式?
PyCharm中numpy.arange两种函数签名差异及参数报错原因
双签名的来源
PyCharm弹窗顶部展示的是从numpy内置的**类型提示存根文件(.pyi)**读取的静态声明,下方的签名是PyCharm解析函数的文档字符串(docstring)后提取的实际参数说明,和官方参数定义完全对齐。
numpy大量核心函数由C语言实现,Python层没有原生的函数定义,类型提示存根文件为了兼容不同numpy版本的参数差异,避免类型提示误报,就用了宽松的*args、**kwargs做通用声明,没有写死所有参数。
*args和**kwargs的实际含义
存根文件里的*args和**kwargs仅为兼容写法,不代表函数真的支持任意位置参数和关键字参数:
- 实际运行时函数的参数校验由底层C代码执行,只会接收文档明确列出的参数
- 日常开发时要以下方从docstring提取的参数签名为准,不要参考顶部存根文件的宽松声明
非法关键字参数报错的原因
你传入的blabla不属于arange支持的参数范围,底层C代码的严格校验逻辑会直接拦截不在白名单内的参数,抛出TypeError,这一校验逻辑和存根文件的宽松声明没有关联,属于运行时的强制校验。
内容的提问来源于stack exchange,提问作者lukasz21
相关产品推荐
相关产品推荐

