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对象)

240

被折叠的 条评论
为什么被折叠?



