天天看点

Python的星号(*)和双星号(**)用法

①引言

在Python中,星号除了用于乘法数值运算和幂运算外,还有一种特殊的用法是在变量前加单个星号或两个星号,实现多参数的传人或变量的拆解。

②什么是星号变量

最初,星号变量是用在函数的参数传递上的,在下面的实例中,单个星号代表这个位置接受任意多个非关键字参数,在函数的*b位置上将其转化成元组,

def one(a,*b):
	    """a是一个普通传入参数,*b是一个非关键字星号参数"""
	    print(b)
one(1,2,3,4,5,6)
      

 out:(2,3,4,5,6)

③双星号代表这个位置接收任意多个关键字参数,在**b位置上将其转化成字典:

def two(a=1,**b):
	    """a是一个普通关键字参数,**b是一个关键字双星号参数"""
	    print(b)
two(a=1,b=2,c=3,d=4,e=5,f=6)	 
      

 out:t

wo(a

=

1

,b

=

2

,c

=

3

,d

=

4

,e

=

5

,f

=

6

)

④扩展用法单星号变量实例

单星号变量不仅仅能够用在函数的参数传递中,实际上对一个普通变量使用单星号前缀,能够将这个变量拆分成单个元素,请看下面的实例

Python的星号(*)和双星号(**)用法

如果在变量前面使用单星号,实际上是对变量的一次拆解操作,将变量中单独的元素拆解出来,

函数会将这些传入的单个元素保存成一个元组,这就是为什么我们

print(x[0])

能够提取第一个元素的原因.

列表是可以更改的,将列表拆分后传入函数,尝试在函数内部更改第一个元素的值,结果触发了“TypeError”异常,不论传入的参数的原始类型是什么,four(*x)函数在*x的位置接受这些传入的参数后,都会将其保存成”元组”,而元组是不能改变的。

如果

传入了一个字典元素,发现仅输出了字典元素的键,并没有包含值,实际上,单星号是无法读取到字典中的值的,永远只会读取到字典中的键,如果想读取到字典中的值,需要使用双星号

⑤扩展用法双星号变量实例

我们使用单星号拆分了一个字典传递给函数,却只能得到字典的键,下面演示如何使用双星号来获得字典的值:

Python的星号(*)和双星号(**)用法

 绿色 1)这里保存成元组

 Ps:注意,使用这种方法将字典传入函数的时候,字典的键的命名要符合python变量的命名规则,通过上面的分析也不难看出,双星号会将字典首先转换成关键字参数的形式,就相当于将字典中的键作为变量命,如果键不符合变量命名规则,会抛出一个"TypeError"异常,大家可以尝试着颠倒一下上面字典中的键和值,使用数字作为键,看看会出现什么问题。

⑥在一个函数的接收参数中,同时出现"非关键字参数(位置参数)"和"关键字参数"时,可以使用一个单星号来分隔这两种参数

Python的星号(*)和双星号(**)用法

⑦要在一个函数中包含多种参数的组合,必须遵守这样的顺序:位置参数(必选参数),默认参数,单星号参数或星号分隔符,关键字参数,双星号参数;

请看下面的实例