参数定义中的星号(`*`)

简介: 参数定义中的星号(`*`)

参数定义中的星号(*)的作用和如何传参还有些疑问。让我尝试更清晰地解释一下。

在Python函数定义中,当星号(*)单独出现时,它用来分隔位置参数和后续的关键字参数。这意味着在星号之前可以有任意数量的位置参数,而在星号之后的所有参数都必须是关键字参数,即必须使用参数名=值的形式来传递。

让我们回顾一下您提供的函数定义:

def ones(shape, dtype=None, order='C', *, like=None):

这里的参数是如何工作的:

  1. shape 是一个位置参数,这意味着在调用函数时,它必须以位置参数的形式传入,不能使用关键字参数的形式。

  2. dtypeorder 也是位置参数,但是它们是可选的,并且有默认值。这意味着你可以不提供它们,或者使用位置参数或关键字参数的形式提供它们。

  3. * 表示所有在它之后的参数都必须是关键字参数。在这个例子中,只有 like 参数跟在了星号后面。

现在,关于传参的部分:

  • 在调用函数时,shape 必须首先传入,作为位置参数,不带参数名。
  • dtypeorder 可以按顺序传入,作为位置参数,也可以通过它们的名字作为关键字参数传入。
  • like 必须通过关键字参数的形式传入,即使用 like=

这里是一些正确的调用方式:

# 正确的调用:只传入必需的shape参数
ones((2, 2))

# 正确的调用:传入必需的shape参数和可选的dtype参数
ones((2, 2), dtype=int)

# 正确的调用:传入必需的shape参数,使用关键字参数dtype和order
ones((2, 2), dtype=float, order='F')

# 正确的调用:传入所有参数,包括关键字参数like
ones((2, 2), dtype=float, order='F', like=some_array)

这里是一些错误的调用方式,因为它们试图在星号(*)之后的位置参数中传入参数:

# 错误的调用:试图在星号之后的位置参数中传入dtype
ones((2, 2), int)  # 这会引发TypeError

# 错误的调用:试图在星号之后的位置参数中传入order
ones((2, 2), order='F')  # 这也会引发TypeError

在上述错误调用中,Python期望在星号(*)之后的所有参数都是通过关键字参数的形式传递的。如果你尝试以位置参数的形式传递它们,Python解释器会抛出一个TypeError异常。

希望这次的解释更加清晰,并且能够帮助你理解星号(*)在函数定义中的作用以及如何正确地传递参数。

目录
相关文章
|
5月前
|
Python
Python函数参数类型不匹配
【6月更文挑战第2天】
49 4
|
6月前
|
编译器 C++
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
65 0
|
C++
17 C++ - 函数的占位参数
17 C++ - 函数的占位参数
71 0
|
5月前
|
编译器 C语言 C++
【C++】:C++关键字,命名空间,输入&输出,缺省参数
【C++】:C++关键字,命名空间,输入&输出,缺省参数
42 0
|
5月前
|
编译器 C++
C++对C的改进和拓展\域解析符、形参默认值、函数重载
C++对C的改进和拓展\域解析符、形参默认值、函数重载
25 0
|
6月前
|
数据处理
正则表达式详解:解析星号的含义
【4月更文挑战第3天】
855 1
正则表达式详解:解析星号的含义
|
6月前
|
存储 程序员 编译器
C++注释、变量、常量、关键字、标识符、输入输出
C++注释、变量、常量、关键字、标识符、输入输出
函数的占位参数
函数的占位参数
41 0
20.从入门到精通:参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数
20.从入门到精通:参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数
标识符(含义、组成、定义规则、命名规范)
标识符 标识符含义 ​ 大家第一次见到标识符这个词的时候可能会有点陌生,其实标识符就是我们编程的时候使用的“名字“ , 给类、接口、方法、变量、常量名,包名等起名字的字符序列
512 0
下一篇
无影云桌面