当前位置: 首页 > news >正文

Python之参数星号(*)使用笔记

背景

在学习python时发现方法调用和方法定义会经常发现有带星号的标记,为了弄明白是怎么使用的。特此做个笔记。

一、参数符号对比速查表

符号类使用场景作用描述示例
无符号函数定义/调用普通位置参数或关键字参数.def func(a, b)
*函数定义收集多余位置参数为元组.def func(*args)
*函数调用解包可迭代对象为位置参数.func(*[1,2])
**函数定义收集多余关键字参数为字典def func(**kwargs)
**函数调用解包字典为关键字参数func(**{‘x’:1})
单独*参数分隔强制后续参数必须用关键字指定def func(a, *, b)

二、核心区别详解

1. 无符号参数(基础参数)

# 位置参数示例
def add(a, b):
    return a + b

add(3, 5)        # ✅ 正确:位置传参
add(b=5, a=3)    # ✅ 正确:关键字传参

2. 单星号(*)参数

定义时使用(收集位置参数)

def log(*values):
    print(type(values))  # <class 'tuple'>
    print(values)

log(1, 'A', True)  # 输出: (1, 'A', True)

调用时使用(解包可迭代对象)

def plot(x, y):
    print(f"绘制点({x},{y})")

points = [5, 8]
plot(*points)  # 等效于 plot(5, 8)

3. 双星号(**)参数

定义时使用(收集关键字参数)

def user_info(**details):
    print(type(details))  # <class 'dict'>
    print(details)

user_info(name='Alice', age=25)  # 输出: {'name': 'Alice', 'age': 25}

调用时使用(解包字典)

def create_profile(name, age):
    print(f"{name} | {age}岁")

data = {'name': 'Bob', 'age': 30}
create_profile(**data)  # 等效于 create_profile(name='Bob', age=30)

4. 强制关键字参数(单独*)

def register(username, *, email, phone):
    print(f"注册用户: {username}, 邮箱: {email}, 电话: {phone}")

register("wyz", email="wyz@example.com", phone="13800138000")  # ✅ 正确
register("bob456", "bob@test.com", "12345678911")  # ❌ 报错:email和phone必须用关键字参数

三、混合使用案例

def complex_example(a, b=0, *args, c, d=10, **kwargs):
    print(f"""
    固定参数: a={a}, b={b}
    可变位置参数: args={args}
    强制关键字参数: c={c}, d={d}
    可变关键字参数: kwargs={kwargs}
    """)

complex_example(1, 2, 3, 4, c=5, e=20, f=30)
# 输出:
# 固定参数: a=1, b=2
# 可变位置参数: args=(3, 4)
# 强制关键字参数: c=5, d=10
# 可变关键字参数: kwargs={'e': 20, 'f': 30}

相关文章:

  • js基础二
  • JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)
  • Docker 常用指令手册(学习使用)
  • Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
  • 16.11 LangChain SQL 生成与执行实战:构建安全高效的数据库查询引擎
  • DeepSeek如何快速开发PDF转Word软件
  • 【JAVA面试题】JDK、JRE、JVM 三者区别和联系
  • 商米科技前端工程师(base上海)内推
  • 【HTML—前端快速入门】HTML 基础
  • 什么是最终一致性,它对后端系统的意义是什么
  • 物联网 智慧园区井盖管理办法和功能介绍
  • 大数据学习(53)-Hive与Impala
  • 授权与认证之jwt(四)创建OAuth2 Filter类
  • 3471. 找出最大的几近缺失整数
  • 基于图神经网络的会话推荐经典论文
  • 十四届蓝桥杯JAVA-b组-合并石子
  • _ 为什么在python中可以当变量名
  • Redis面试常见问题——使用场景问题
  • int new_pos = (pos + delta + 9) % 9 化曲为直算法
  • 蓝桥杯自我复习打卡
  • 倒计时1天:走进“中国荔乡”茂名,探寻农交文旅商融合发展新模式
  • 魔都眼|邮轮港国际帆船赛启动,120名中外选手展开角逐
  • 美国失去最后一个AAA评级,资产价格怎么走?美股或将触及天花板
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理
  • 出走的苏敏阿姨一路走到了戛纳,这块红毯因她而多元
  • 专访|《内沙》导演杨弋枢:挽留终将失去的美好