当前位置: 首页
业界动态
Python单星号与双星号的核心用法解析

Python单星号与双星号的核心用法解析

热心网友 时间:2026-06-15
转载

在Python编程中,单星号(*)与双星号(**)是一对基础却极易混淆的语法符号——它们虽同名“星号”,但一个专门处理可迭代对象,另一个则聚焦于字典操作。许多初学者见到别人代码中的*args**kwargs时,往往只会简单模仿,一旦遇到实际场景便容易出错。今天我们将彻底拆解这两者的具体用法,让你看完之后能够准确判断该用哪个星号。

一、单星号(*):可迭代对象的“解包利器”与可变位置参数

单星号的核心作用围绕可迭代对象展开——无论是解包列表、元组,还是定义可变数量位置参数,都离不开“可迭代”这一概念。下面介绍的三个高频使用场景,每个都是实际开发中的硬核技能。

1. 用法一:解包可迭代对象,简化赋值与传参

当你持有列表或元组,希望一次性取出内部元素,或者将其整个传递给函数时,单星号能帮你省去大量循环和索引操作。

示例1:解包赋值

# 常规写法:逐个赋值,繁琐
nums = [10, 20, 30, 40]
a = nums[0]; b = nums[1]; c = nums[2]; d = nums[3]
print(a, b, c, d)  # 输出:10 20 30 40

# 单星号解包:一步到位
nums = [10, 20, 30, 40]
a, b, c, d = *nums,  # 注意末尾的逗号,避免语法报错
print(a, b, c, d)  # 输出:10 20 30 40

示例2:解包传递给函数

def add(a, b, c):
    return a + b + c

# 常规写法:逐个传
print(add(10, 20, 30))  # 输出:60

# 单星号解包:直接传可迭代对象
nums = [10, 20, 30]
print(add(*nums))  # 等价于 add(10, 20, 30),输出:60

注意:解包时元素个数必须和函数参数个数保持一致,否则会直接触发异常——后续讲解可变参数时会解决这一问题。

2. 用法二:合并多个可迭代对象

单星号还能快速拼接多个列表或元组,比链式调用extend()更加简洁优雅。

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

# 常规写法:extend 需要多次调用
new_list = list1.copy()
new_list.extend(list2)
new_list.extend(list3)
print(new_list)  # [1,2,3,4,5,6,7,8,9]

# 单星号一步到位
new_list = [*list1, *list2, *list3]
print(new_list)  # [1,2,3,4,5,6,7,8,9]

3. 用法三:函数的可变位置参数(*args

这是单星号最核心的用法——当函数不确定接收多少个位置参数时,借助*args将所有传入的位置参数打包为一个元组。参数名不固定(例如*abc也可),但业界惯例推荐使用args

def add_all(*args):
    print("args的类型:", type(args))  # 
    print("args的内容:", args)        # 打包成元组
    return sum(args)

print(add_all(10, 20))          # 输出:30
print(add_all(10, 20, 30, 40))  # 输出:100
print(add_all())                # 输出:0(空元组)

请牢记:*args仅能接收位置参数,无法处理关键字参数——例如add_all(a=10, b=20)会直接抛出错误。

二、双星号(**):字典的“专属解包工具”与可变关键字参数

双星号与单星号各司其职——它只作用于字典,用于解包键值对、合并字典,以及定义可变数量关键字参数。同样包含三个高频应用场景。

1. 用法一:解包字典,提取键值对

双星号解包字典时,会将键值对展开,常用于函数参数传递。

def print_info(name, age, city):
    print(f"姓名:{name},年龄:{age},城市:{city}")

# 常规传关键字参数
print_info(name="张三", age=25, city="北京")

# 双星号解包字典
info = {"name": "张三", "age": 25, "city": "北京"}
print_info(**info)  # 等价于上一行

2. 用法二:合并字典

自 Python 3.5+ 起,使用双星号合并字典比update()更简洁,且不会修改原字典。

dict1 = {"name": "张三", "age": 25}
dict2 = {"city": "北京", "job": "程序员"}
dict3 = {"salary": 15000}

# update 写法会修改原字典
new_dict = dict1.copy()
new_dict.update(dict2)
new_dict.update(dict3)
print(new_dict)

# 双星号一步到位,不修改原字典
new_dict = {**dict1, **dict2, **dict3}
print(new_dict)  # 结果同上

注意:若多个字典包含相同键,后面的值会覆盖前面的(与update()行为一致)。

3. 用法三:函数的可变关键字参数(**kwargs

*args对应,**kwargs用于接收不确定数量的关键字参数,并将其打包为字典。

def print_kwargs(**kwargs):
    print("kwargs的类型:", type(kwargs))  # 
    print("kwargs的内容:", kwargs)
    for key, value in kwargs.items():
        print(f"{key}:{value}")

print_kwargs(name="张三", age=25)
print_kwargs(city="北京", job="程序员", salary=15000)

输出分别如下:

kwargs的类型: 
kwargs的内容: {'name': '张三', 'age': 25}
name:张三
age:25
kwargs的类型: 
kwargs的内容: {'city': '北京', 'job': '程序员', 'salary': 15000}
city:北京
job:程序员
salary:15000

最后送你一个速记口诀,保证再也不会用错:

如果处理的是列表、元组(或任何可迭代对象),需要解包、合并,或者函数需要接收任意数量的位置参数 → 使用单星号(*)
如果处理的是字典,需要解包键值对、合并字典,或者函数需要接收任意数量的关键字参数 → 使用双星号(**)

归根结底,单星号和双星号都是 Python 为了简化代码、提升灵活性而设计的语法糖。只需亲自动手练习几次上述示例,你很快就能形成肌肉记忆,以后再也不会选错。

来源:https://www.51cto.com/article/840912.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
中国牵头全球首个自动驾驶世界标准 L3/L4上路新阶段

中国牵头全球首个自动驾驶世界标准 L3/L4上路新阶段

2026年6月,联合国世界车辆法规协调组织通过全球首个自动驾驶技术法规,由中国等多国共同牵头。法规明确L3 L4级系统安全要求、全生命周期管理及测试方法,将于同年7月生效。中国同步推进强制性国家标准,衔接国际规则,推动自动驾驶进入合规新阶段。

时间:2026-07-05 14:36
当贝耳机Air 1正式发布,AI软硬件一体化全面落地

当贝耳机Air 1正式发布,AI软硬件一体化全面落地

提到当贝,许多人首先想到的便是“大屏”这一关键词。 这一点并不难理解。从服务超两亿用户的软件生态,到“每卖出两台激光投影,就有一台是当贝”的市场份额,这家智能科技企业在客厅场景中的影响力已十分稳固。然而,当贝的愿景显然不止局限于客厅。近期,当贝正式发布了其首款AI耳机——当贝耳机 Air 1。这绝非

时间:2026-07-05 14:36
万元起 杜卡迪全新揽途Multistrada V4 Rally上市

万元起 杜卡迪全新揽途Multistrada V4 Rally上市

杜卡迪全新揽途MultistradaV4Rally上市,起售价23 8万元。搭载V4Grandturismo发动机,标配自动降低装置、Skyhook悬挂及前后雷达,兼顾长途探险与运动性能。翡翠绿版限量10台,售价24 1万元。

时间:2026-07-05 14:34
美团CEO王兴自公司成立从未卖股且无计划

美团CEO王兴自公司成立从未卖股且无计划

在6月26日的美团股东大会上,CEO王兴放出了一个相当直白的表态:从公司成立至今,他个人手里的股票一股都没卖过,而且未来也没有任何减持计划。这话放在当前的市场环境下,分量不言而喻。 王兴还专门解释了去年那笔备受关注的股票转让——2024年他将个人持股的10%捐给了一家基金会。他强调,这完全是出于公益

时间:2026-07-05 14:34
芯明与钧舵机器人正式启动战略合作 深度融合生态共进

芯明与钧舵机器人正式启动战略合作 深度融合生态共进

1月22日,钧舵机器人与芯明智能等企业签署战略合作协议,旨在从芯片级到系统级融合机械结构、感知与控制算法,打造低成本、高灵活性的智能末端执行器,推动具身智能生态共建。

时间:2026-07-05 14:34
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜