【python小知识】*的作用

1. 数学运算符:乘法与乘方

这是最基础的用法:

  • 普通乘法3 * 4 结果为 12
  • 字符串/列表重复"a" * 3 结果为 "aaa"[0] * 3 结果为 [0, 0, 0]
  • 乘方运算2 ** 3 结果为 8(注意这里是两个星号 **)。

2. 解包 / 展开(Unpacking)

列表、元组等可迭代对象“拆开”,作为独立的参数传给函数。

def add(a, b): return a + b
nums = [1, 2]
add(*nums)  # 等价于 add(1, 2)

3. 收集剩余元素(Packing)

在赋值时,如果变量不够分,可以在某个变量前加 *,它会把多出来的元素打包成一个列表收集起来。

a, *rest, b = [1, 2, 3, 4, 5]
print(a)    # 1
print(rest) # [2, 3, 4]
print(b)    # 5

4. 函数定义中的特殊参数控制

在定义函数(def)时,* 有非常特殊的语法作用:

  • 接收任意数量的位置参数 (*args): 把传入的多余参数打包成一个元组。

    def func(*args):
        print(args)
    func(1, 2, 3)  # 输出: (1, 2, 3)
    
  • 作为“强制关键字参数”的分界线(裸 *: 如果在函数参数列表中只写一个 *,那么 * 后面的所有参数在调用时必须使用 参数名=值 的形式传入。

    def connect(ip, port, *, timeout=30, retry=3):
        pass
    
    connect("127.0.0.1", 8080)              # 正确
    connect("127.0.0.1", 8080, 60)          # 报错!timeout 必须带名字
    connect("127.0.0.1", 8080, timeout=60)  # 正确
    

双星号 ** 的作用

既然提到了 *,顺便提一下 **,它专门用于字典(Dictionary)

  • 解包字典func(**my_dict) 将字典的键值对作为关键字参数传入函数。
  • 收集关键字参数def func(**kwargs): 将多余的关键字参数打包成一个字典。

举一个例子:

x是一个[(-5, -2),
 (-4.5, -1.6),
 (-4.05, -1.28),
 (-3.6449999999999996, -1.024),
 (-3.2804999999999995, -0.8192)]的列表

plt.plot(*zip(*results),'-o',color='#ff7f0e')

中*zip(*results)的含义是什么?

首先*results将列表解包,去掉外层[],变成(-5, -2), (-4.5, -1.6),(-4.05, -1.28), (-3.6449999999999996, -1.024), (-3.2804999999999995, -0.8192)

其次,zip(*results)将第一个元素打包在一起,第二个元素打包在一起,形成一个包含两个元组的迭代器。zip接收一个或多个可迭代对象(如列表、元组等),将这些对象中相同索引位置(对应位置)的元素提取出来,组合成一个个新的元组。

最后,*zip(*results)去除最外面的迭代器,将两个元组作为独立的参数传递给plt.plot(plt.plot可以接受列表,元组,numpy数组,pandas对象)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值