背景 前几天看了些python的代码,发现有些函数的参数前带有(*)号,有的甚至有两个(*)号,不清楚它们代表什么意思。 解释 查阅资料后发现,参数前面加上* 号 ,意味着参数的个数不止一个,另外带一个星号(*)参数的函数传入的参数存储为一个元组(tuple),带两个(*)号则是表示字典(dict) 参数带星号表示支持可变不定数量的参数,这种方法叫参数收集。 星号又可以带1个或2个,带1个表示按位置来收集参数,带2个星号表示按关键字来收集参数。 1、带一个星号的参数收集模式: 这种模式是在函数定义时在某个形参前面加一个星号,调用时按位置匹配不带星号的形参和实参,多余的实参都将作为一个元组的元素 在Python编程语言中,函数参数前的星号(*)和双星号(**)是两种特殊的语法,用于处理可变数量的参数。这些符号在函数定义时使用,允许我们编写更加灵活的函数,能够接收不确定数量的参数。下面将详细讲解这两种星号的含义及其用法。 单星号(*)表示“可变位置参数”。当在函数定义中,形参前加上*,例如`def func(param1, *param2):`,这意味着函数可以接受任意数量的位置参数,这些参数将被收集到一个元组(tuple)中,这个元组的名称就是`param2`。在函数调用时,所有未被普通形参(如`param1`)匹配的参数将会被收集到`param2`这个元组中。 例如: ```python def t1(param1, *param2): print(param1) print(param2) t1(1, 2, 3, 4) # 输出:1 (2, 3, 4) ``` 在这个例子中,`param1`接收第一个参数1,剩下的2, 3, 4被收集到`param2`这个元组中。 双星号(**)表示“可变关键字参数”。同样地,当形参前加上**,如`def func(param1, **param3):`,它表示函数可以接受任意数量的关键字参数,这些参数将被收集到一个字典(dict)中,字典的名称就是`param3`。关键字参数是以键值对的形式传递的,如`func(a=1, b=2)`。 例如: ```python def t2(param1, **param2): print(param1) print(param2) t2(1, a=2, b=3) # 输出:1 {'a': 2, 'b': 3} ``` 在这个例子中,`param1`接收第一个参数1,而关键字参数`a=2`和`b=3`被收集到`param2`这个字典中。 值得注意的是,`*`和`**`可以同时出现在一个函数定义中,这允许函数同时接受可变位置参数和可变关键字参数。在这种情况下,可变位置参数必须在可变关键字参数之前,如`def func(a, b, *args, **kwargs):`。 例如: ```python def t4(a, b=10, *args, **kwargs): print(a) print(b) print(args) print(kwargs) t4(1, 2, 3, 4, e=5, f=6, g=7) # 输出:1 2 (3, 4) {'e': 5, 'g': 7, 'f': 6} ``` 在这个例子中,`a`接收到1,`b`接收到默认值10,3和4被收集到`args`元组中,而`e=5`, `f=6`, `g=7`被收集到`kwargs`字典中。 此外,星号还可以用于参数传递时的解压操作。例如,如果有一个包含多个元素的列表或元组,我们可以使用星号将其元素作为单独的参数传递给函数,如`t3(*args)`,这等价于`t3(args[0], args[1])`,使得函数内部能够分别处理每个元素。 Python中的星号和双星号提供了一种灵活的方式来处理函数参数,使得函数可以接受不同数量的位置参数和关键字参数,这对于编写通用的函数和处理动态数据非常有用。理解并掌握这种机制是提升Python编程能力的重要一环。
- 粉丝: 9
- 资源: 973
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2018级计算机系数据库实验三.zip学习资料
- JS省市区三级联动效果、JS随机生成验证码、个税计算器.zip
- 跨平台防流式 ESP 破解程序,适用于《反恐精英全球攻势》,使用现代 C++ 编写 渲染和 GUI 由 Dear ImGui + FreeType 提供支持 .zip
- 跨平台游戏引擎(Windows、Linux、Mac、Android),具有物理、线程纹理加载、多后端(OpenGL、DirectX 等)和现代流音频 .zip
- 跨平台、与图形 API 无关的“自带引擎,框架”风格渲染库 .zip
- 2024数证杯apk部分验材-1
- 资产导入器和查看器旨在以 VR 帧速率对裸体人物进行照片般逼真的渲染 .zip
- 象形文字 3 渲染引擎.zip
- 该项目的主要目标是生成和可视化使用体素构建的地形 为了进行性能和实施比较,我们使用了不同的方法和计算技术来实现 .zip
- 大三年级2021年秋《计算机体系结构》课程实验部分.zip