天天看点

python中运算符*和**的作用-参数传递

**和*常常用于参数传递中的打包和解包,对函数传递的参数进行打包(打包成元组tuple或字典dictionary)和拆解(分解成单个元素),其中元组tuple的打包和解包使用单星号,字典dictionary的打包和拆解使用双星号

1.打包

打包就是将传递给函数的任意多个非关键字参数/关键字参数打包成一个元组或字典(元组只能接收非关键字参数,字典只能接收关键字参数)

打包tuple:

def pack(a, *b):
        print type(a), a
        print type(b), b

pack(1, 2, 3, 4, 5)
           

输出结果:

<type 'int'> 1
<type 'tuple'> (2, 3, 4, 5)
           
def pack(a, **b):
        print type(a), a
        print type(b), b

pack(1, a1=2, a2=3)
           

输出结果如下:

<type 'int'> 1
<type 'dict'> {'a1': 2, 'a2': 3}
           

2.拆解

拆解就是将传递给函数的一个列表,元组或者字典拆分成独立的多个元素,然后赋值给函数中的参变量.在拆解字典时,有两种拆解方法,第一种使用*拆解,解出来传递给函数的只有键值key,第二种使用**拆解,解出来的是字典的每一项.

def pack(a, b, *c):
        print type(a), a
        print type(b), b
        print type(c), c

score = [1.0, 2.0, 3.0, 4.0]
pack(*score)
           

<type 'float'> 1.0

<type 'float'> 2.0

<type 'tuple'> (3.0, 4.0)

def pack(*c):
        print type(c), c

student = {'score' : 1.0, 'id' : 2, 'name' : 'xiaoxiao'}
pack(*student)
           

<type 'tuple'> ('score', 'id', 'name')

def pack(*a, **b):
        print type(a), a
        print type(b), b

age = [1, 2, 3]
student = {'score' : 1.0, 'id' : 2, 'name' : 'xiaoxiao'}
pack(*age, **student)
           

<type 'tuple'> (1, 2, 3)

<type 'dict'> {'score': 1.0, 'id': 2, 'name': 'xiaoxiao'}