1.算数运算
* 代表乘法
** 代表乘方
2.函数形参
主要用于函数定义,区别:
- *args,表示任何多个无名参数,它本质是一个 tuple(位置参数positional argument)
- **kwargs 表示关键字参数,它本质上是一个 dict(关键词参数keyword argument)
如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。可变位置参数*args是一个元组,是不可修改的。
def fun(name, *args, **kwargs):
print(name)
print(args)
print(kwargs)
fun(1, 2, 3, 4, 5, a="1", b="2", c="3")
1
(2, 3, 4, 5)
{a="1", b="2", c="3"}
3.函数实参
如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用。
def fun(data1, data2, data3):
print("data1: ", data1)
print("data2: ", data2)
print("data3: ", data3)
args = ("one", 2, 3)
fun(*args)
data1: one
data2: 2
data3: 3
kwargs = {"data3": "one", "data2": 2, "data1": 3}
fun(**kwargs)
data1: 3
data2: 2
data3: one
4.序列解包
- 什么是序列解包,看例子:这种方法并不限于列表和元组,而是适用于任意序列类型(甚至包括字符串和字节序列)。只要赋值运算符左边的变量数目与序列中的元素数目相等,都可以用这种方法将元素序列解包到另一组变量中。
a, b, c = 1, 2, 3
# a = 1
# b = 2
# c = 3
- 可以利用 * 表达式获取单个变量中的多个元素,只要它的解释没有歧义即可。* 获取的值默认为 list.
获取剩余部分:
a, b, *c = 0, 1, 2, 3
# a = 0
# b = 1
# c = (2, 3)
获取中间部分:
a, *b, c = 0, 1, 2, 3
# a = 0
# b = (1, 2)
# c = 3
如果左值比右值要多,那么带 * 的变量默认为空:
a, *b, c = a, b, *c = 0, 1
# a = 0
# b = 1
# c = ()
嵌套解包:
(a, b), (c, d) = (1, 2), (3, 4)
# a = 1
# b = 2
# c = 3
# d = 4
出处:
https://blog.csdn.net/yilovexing/article/details/80577510
https://blog.csdn.net/yilovexing/article/details/80576788