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

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

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

在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异常。

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

目录
相关文章
|
13天前
|
编译器 C++
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
18 0
|
13天前
|
数据处理
正则表达式详解:解析星号的含义
【4月更文挑战第3天】
99 1
正则表达式详解:解析星号的含义
|
13天前
|
存储 程序员 编译器
C++注释、变量、常量、关键字、标识符、输入输出
C++注释、变量、常量、关键字、标识符、输入输出
|
13天前
|
存储 前端开发 Java
去掉参数中第一个“,”
去掉参数中第一个“,”
31 0
|
8月前
|
Python
Python函数详解:参数、返回值和文档字符串
Python函数详解:参数、返回值和文档字符串
112 0
|
8月前
|
程序员 Serverless Python
Python函数参数中的冒号与箭头
Python函数参数中的冒号与箭头
207 1
变量替换
变量替换
75 0
|
Shell
C编译中如何向代码中传递一个预定义字串
C编译中如何向代码中传递一个预定义字串
57 0
标识符(含义、组成、定义规则、命名规范)
标识符 标识符含义 ​ 大家第一次见到标识符这个词的时候可能会有点陌生,其实标识符就是我们编程的时候使用的“名字“ , 给类、接口、方法、变量、常量名,包名等起名字的字符序列
350 0
|
JavaScript 开发者
路由-关于命名视图的名称到底是变量还是字符串的说明|学习笔记
快速学习路由-关于命名视图的名称到底是变量还是字符串的说明
51 0

热门文章

最新文章