详解python中的*符号

Published on 2025-04-09 23:47 in 分类: 随笔 with 狂盗一枝梅
分类: 随笔

在Python中,星号(*)是一个多用途运算符,具有多种使用场景。它在函数定义、解包操作、算术运算、模块导入等多个领域扮演重要角色。

1、算术运算符

单星号 *:用于数值的乘法或幂运算中的相乘。

result = 2 * 3   # 输出6

双星号 **:表示幂运算(指数):

result = 2 ** 3  # 输出8(2的三次方)

另外,比较特殊的,单 * 在左侧为字符串的情况下表示“复制”N次的意思,其实这就是乘法运算。

result = "A"*3  # 输出AAA(3个A)

2、函数参数

关于函数参数,可以先参考文章:https://liaoxuefeng.com/books/python/function/parameter/index.html

符号*函数参数这里有两个用处。

*args:位置参数收集,允许函数接受任意数量的位置参数,并将其存储为一个元组

def my_func(*args):
    print(args)
my_func(1, 2, 3)  # 输出:(1, 2, 3)

**kwargs:关键字参数收集,允许函数接受任意数量的关键字参数(键值对),并存储为一个字典

def my_func(**kwargs):
    print(kwargs)
my_func(a=1, b=2)  # 输出:{'a': 1, 'b': 2}

3、参数解包

解包操作允许将序列(如列表、元组、字典)展开为独立的参数。

函数调用中的解包

*解包可迭代对象(如列表、元组)为位置参数:

def add(a, b): 
    return a + b
nums = [3, 5]
print(add(*nums))  # 输出8,等价于 add(3, 5)

**解包字典为关键字参数:

config = {'width': 800, 'height': 600}
def configure(width, height):
    return f"Width: {width}, Height: {height}"
print(configure(**config))  # 输出: "Width: 800, Height: 600"

序列解构

* 捕获剩余元素:

# 解构列表
a, *rest = [1, 2, 3, 4]
print(a)    # 1
print(rest)  # [2, 3, 4]
# 解构元组
first, *middle, last = (10, 20, 30, 40)
print(first)   # 10
print(middle)  # [20, 30]
print(last)    # 40

4、模块导入

from module import * 导入模块中的所有公有符号(除以下划线开头的名称)。不建议在大型项目中使用,因为它可能污染命名空间。

from math import *
print(sqrt(16))  # 输出4.0

5、字典与集合的解包

合并字典

在Python3.5之后,可以使用如下方式合并字典

dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
merged = {**dict1, **dict2}  # 输出: {'a':1, 'b':3, 'c':4}

实际上是先解包,再合并。

Python3.9之后,可以使用|符号合并字典

merged = dict1 | dict2  # 等同于 {**dict1, **dict2}

合并集合或列表

* 展开可迭代对象:

# 合并列表
list1 = [1, 2]
list2 = [3, 4]
combined = [*list1, *list2]  # 输出:[1, 2, 3, 4]
# 合并集合
set1 = {1, 2}
set2 = {3, 4}
combined_set = {*set1, *set2}  # 输出:{1,2,3,4}

#python
复制 复制成功