Python中的*和**的用法

一、基础算术运算

1.* 乘法运算符

print(3 * 4)       # 12(数字乘法)
print("a" * 3)     # "aaa"(字符串重复)
print([1,2] * 2)   # [1,2,1,2](列表重复)

2.** 幂运算符

print(2 ** 3)      # 8(2的3次方)

二、函数参数中的使用

(1) 定义函数时:收集参数

*args:收集任意数量的位置参数 → 元组

例1:

def func(a, *args):
    print(a)        # 1
    print(args)     # (2, 3) 元组

func(1, 2, 3)

例2:

def func(*args):
    for arg in args:
        print(arg)

func(1, 2, 3, "hello")

**kwargs:收集任意数量的关键字参数 → 字典

例1:

def func(a, **kwargs):
    print(a)        # 1
    print(kwargs)   # {'b': 2, 'c': 3}

func(1, b=2, c=3)

例2:

def func(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

func(name="Alice", age=25, city="New York")
(2) 调用函数时:解包参数

在 Python 调用函数时,解包参数是一种非常方便的功能,它允许你将一个可迭代对象(如列表、元组等)或字典中的元素解包为函数的参数。

*iterable:解包可迭代对象为位置参数

def func(a, b, c):
    print(a + b + c)

nums = [1, 2, 3]
func(*nums)  # 等价于 func(1, 2, 3) → 输出 6

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

def func(a, b, c):
    print(a * b * c)

params = {'a': 2, 'b': 3, 'c': 4}
func(**params)  # 等价于 func(a=2, b=3, c=4) → 输出 24

三、解包操作(赋值与迭代)

1.序列解包

a, *b, c = [1, 2, 3, 4]
print(a)  # 1
print(b)  # [2, 3](列表)
print(c)  # 4

2.迭代中解包

points = [(1, 2), (3, 4)]
for x, y in points:          # 常规解包
    print(x, y)

for first, *rest in [(1, 2, 3), (4, 5)]:
    print(first, rest)        # 1 [2, 3] → 4 [5]

四、字典合并(Python 3.5+)

使用 ** 合并字典:

dict1 = {'a': 1}
dict2 = {'b': 2}
merged = {**dict1, **dict2, 'c': 3}
print(merged)  # {'a': 1, 'b': 2, 'c': 3}

五、强制关键字参数(Python 3+)

在函数定义中,* 之后的参数必须用关键字传递:

def func(a, *, b, c):
    print(a, b, c)

func(1, b=2, c=3)  # 正确
func(1, 2, 3)      # 报错:b和c缺少关键字

六、特殊用法示例

1.同时使用 *args**kwargs

def wrapper(*args, **kwargs):
    print("位置参数:", args)
    print("关键字参数:", kwargs)

wrapper(1, 'a', x=10, y=20)
# 输出:位置参数: (1, 'a')  关键字参数: {'x':10, 'y':20}

2.多层解包

data = [*range(3), *"AB"] 
print(data)  # [0, 1, 2, 'A', 'B']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值