*和**使用

# 总共有以下用途

* 1 使用 * 将可迭代对象解包至列表/元组

* 2 使用 * 和 ** 向函数传递参数

* 3 使用 * 和 ** 捕捉传递至函数的参数
* 4 使用 ** 将字典解包至其他字典

* 5 使用 * 接受 keyword-only 参数
* 6 使用 * 捕捉元组解包过程中的项

## 1 使用 * 将可迭代对象解包至列表/元组

a= [2,1,2,4,5]
aa = [*a, 9,0]
aa 

[2, 1, 2, 4, 5, 9, 0]

## 2 使用 * 和 ** 向函数传递参数, 解压可迭代对象

\* 操作符可用于将可迭代对象解包至函数调用的参数中  -> 可迭代对象被解包

\*\* 操作符允许我们使用键-值对字典,并在函数调用中将其解包为关键字参数  ->  解包为key=value 

a= [2,1,2,4,5]
print(*a)

2 1 2 4 5

dic = {'a':1, 'b':2, 'c':3}
string = "{a}-{b}-{c}".format(**dic)
string

## 3 使用 * 和 ** 捕捉传递至函数的参数

在定义函数时,可以使用 * 操作符捕捉传递给函数的无限数量的位置参数。这些参数被捕捉到一个元组中。-> 被包装为元组

\*\* 操作符还有另一个用法:在定义函数时,我们可以使用 \*\* 将传递给函数的任何关键字参数捕捉到字典中:  -> 被包装为字典

def test(*num):
  print(type(num), num)
test(1,2,3,4)

<class 'tuple'> (1, 2, 3, 4)

def test(**num):
  print(type(num), num)
test(a=1,b=2)

<class 'dict'> {'a': 1, 'b': 2}


## 5 使用 * 接受 keyword-only 参数

在 Python 3 中,有一种特殊的语法来接受 keyword-only 参数。Keyword-only 参数是只能使用关键字语法指定的函数参数,这意味着它们不能使用位置指定参数。

为了接受 keyword-only 参数,在定义函数时,我们可以在 *args 参数后,**kargs 参数前加上命名参数

 

 

keyword-only 参数的特性很酷,但是如果你希望在不捕获无限位置参数的情况下需要 keyword-only 参数呢?

Python 允许这样做,但它的语法有点奇怪,仅使用一个 ** 后面的所有参数都将作为关键字传递:

 

 ## 6 使用 * 捕捉元组解包过程中的项

Python 3 还添加了一种使用 * 操作符的新方法,这种方法只与定义函数与调用函数时使用 * 的特性有关。

* 操作符现在可以用于元组解包:

 

posted @ 2021-04-27 10:35  哈哈哈喽喽喽  阅读(72)  评论(0)    收藏  举报