python 中*与**的用法

*args 与 **kwargs

*args 与 **kwargs 基本上用于函数定义,他们用于向函数输入不定个数的参数,有这个功能的意义代表你不需要知道有多少参数会被输入到你的函数里,但是你依旧想要使用他们。

*args 用于输入非键值的参数

def func_(*args):
    for arg in args:
        print("属于argv的参数有 *argv:", arg)
        
func_(1,2,3,4,5)

该代码块的输出是:

属于argv的参数有 *argv: 1
属于argv的参数有 *argv: 2
属于argv的参数有 *argv: 3
属于argv的参数有 *argv: 4
属于argv的参数有 *argv: 5

**kwargs 用于输入键值的参数

def func_(**kwargs):
    for arg in kwargs:
        print("属于kwargs的键值和kwargs的数值的有:", arg, kwargs[arg])

func_(a=1, b=2)

该代码块的输出是:

属于kwargs的键值和kwargs的数值的有: a 1
属于kwargs的键值和kwargs的数值的有: b 2

可以将args 与*kwargs混用起

def func_(para, *args, **kwargs):
    print("属于函数必须自带的参数有", para)
    for arg in args:
        print("属于列表的参数有:", arg)
    for arg in kwargs:
        print("属于dict的参数,kwargs的键值和kwargs的数值的有:", arg, kwargs[arg])


func_(1,2,3,4,5,a=1,b=2)

该代码块的输出是:

属于函数必须自带的参数有 1
属于list的参数有: 2
属于list的参数有: 3
属于list的参数有: 4
属于list的参数有: 5
属于dict的参数,kwargs的键值和kwargs的数值的有: a 1
属于dict的参数,kwargs的键值和kwargs的数值的有: b 2

*list 指代参数列表

def foo(bar, lee):
    print(bar, lee)
    
l = [1,2]

foo(*l)

该代码块的输出

1 2

*list 作为python 左值

用于接受不定个数的列表赋值

first, *rest = [1,2,3,4]
print(first, rest)
first, *l, last = [1,2,3,4]
print(first,l,last)

改代码块的输出是:

1 [2, 3, 4]
1 [2, 3] 4

你可能感兴趣的:(python 中*与**的用法)