Python编程整理:*与**在形参和实参中的应用

Python编程整理:*与**在形参和实参中的应用

 

1)*与**实现的功能是可变长度传参

可变长度指的是传参的个数不确定

其核心做法是用一个形参来接受溢出的位置实参和关键字实参,比如:

def func(a, *b):
    print(a, b)


func(1, 2, 3)

# 1 (2, 3)

这个*b就是用来接受溢出的位置实参的,溢出实参会以元组的形式传给b。

又比如:

def func(a, **b):
    print(a, b)


func(1, x=2, y=3)

# 1 {'x': 2, 'y': 3}

这个**b是用来接受关键字实参的,会以字典的形式传给b

而在python中,约定俗成使用*args和**kwargs来为可变长度形参起名

 

2)在非形参中,*与**都有着打散数据的作用。

list1 = [1, 2, 3]
dic1 = {'a': 1, 'b': 2, 'c': 3}


def func1(a, b, c):
    print(a, b, c)


func1(*list1)
func1(**dic1)

# 1 2 3
# 1 2 3

**后面必须跟字典,*后面更可被for循环的类型,比如列表,字符串甚至字典。

 

3)**和*在形参中可以混用,**必须在*之后,比如:

def func(*args, **kwargs):
    print(args)
    print(kwargs)


func(1, 3, 5, 7, 'hello', text='hw', x=3, y=4)

# (1, 3, 5, 7, 'hello')
# {'text': 'hw', 'x': 3, 'y': 4}

 

posted @ 2020-08-02 02:54  cutomorrow  阅读(374)  评论(0)    收藏  举报