1 算术运算

  • * 代表乘法
  • ** 代表乘方
    1. >>> 2 * 5
    2. 10
    3. >>> 2 ** 5
    4. 32

2 函数形参

*args 以及 **kwargs 在很多函数中都很常见,是用来将不定数量的参数传递给函数用的。

  • 这两个名字是习惯写法
  • 在函数形参中,可以只使用上面其中之一
    • 但如果想两个一起使用, *args 必须放在 **kwargs 之前
  • *arg 表示任意多个无名参数,本质上是一个 tuple
  • **kwargs 表示任意多个关键字参数,本质上是一个 dict
    1. >>> def fun(*args, **kwargs):
    2. ... print('args=', args)
    3. ... print('kwargs=', kwargs)
    4. ...
    5. >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
    6. args = (1, 2, 3, 4)
    7. kwargs= {A='a', B='b', C='c', D='d'}

3 函数实参

如果函数的形参是定长参数,则传入 *args**kwargs 的实参相当于解引用

  1. >>> def fun(data1, data2, data3):
  2. ... print("data1: ", data1)
  3. ... print("data2: ", data2)
  4. ... print("data3: ", data3)
  5. ...
  6. >>> args = ("one", 2, 3)
  7. >>> fun(*args)
  8. data1: one
  9. data2: 2
  10. data3: 3
  11. >>> kwargs = {"data3": "one", "data2": 2, "data1": 3}
  12. >>> fun(**kwargs)
  13. data1: 3
  14. data2: 2
  15. data3: one

4 序列解包

'*' 可以将变量中可迭代对象的元素拆解出来,变成若干个独立的参数。比如矩阵转置:

  1. > lst = [[1,2,3], [4,5,6]]
  2. > lst_T = list(map(list, zip(*lst)))
  3. > lst_T
  4. [[1, 4], [2, 5], [3, 6]]

https://blog.csdn.net/yilovexing/article/details/80576788

参考链接
https://blog.csdn.net/yilovexing/article/details/80577510