Python 带星号(* 或 **)的函数参数详解

  • Post category:Python

关于“Python带星号(*)的函数参数详解”这个话题,我可以给你一些详细的解释和示例。

一、单个星号*的参数传递

语法格式:

def funcname(param1, param2, *args):
    # do something

在定义函数时,*args表示接受任意个数的非关键字参数,并将其保存在args这个元组变量中。例如:

def sum_numbers(*args):
    res = 0
    for i in args:
        res += i
    return res

print(sum_numbers(1, 2, 3, 4))    # 10

上面的代码中,我们定义了一个求和的函数sum_numbers,它接受任意个数的参数,并将其累加起来返回。

应用实例1:可变参数传递

在调用函数时,也可以用*args传递多个参数,例如:

def sum_numbers(*args):
    res = 0
    for i in args:
        res += i
    return res

lst = [1, 2, 3, 4]
print(sum_numbers(*lst))     # 10

上面的代码中,我们定义了一个列表lst,然后将它作为参数传递给sum_numbers函数。

应用实例2:定义带有固定参数和可变参数的函数

我们还可以将*args和常规参数一起使用,例如:

def myfunc(name, *args):
    print(name, args)

myfunc('Tom', 1, 2, 3)    # Tom (1, 2, 3)

上面的代码中,我们定义了一个函数myfunc,它接受一个字符串参数name和任意个数的参数,并将它们作为元组args输出。

二、双星号**的参数传递

语法格式:

def funcname(param1, param2, **kwargs):
    # do something

在定义函数时,**kwargs表示接受任意个数的关键字参数,并将其保存在kwargs这个字典变量中。例如:

def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(a=1, b=2, c=3)    # {'a': 1, 'b': 2, 'c': 3}

上面的代码中,我们定义了一个输出关键字参数的函数print_kwargs,它接受任意个数的关键字参数,并将它们作为字典kwargs输出。

应用实例1:可变关键字参数传递

在调用函数时,也可以用**kwargs传递多个关键字参数,例如:

def print_kwargs(**kwargs):
    print(kwargs)

dict1 = {'a': 1, 'b': 2, 'c': 3}
print_kwargs(**dict1)    # {'a': 1, 'b': 2, 'c': 3}

上面的代码中,我们定义了一个字典dict1,然后将它作为关键字参数传递给print_kwargs函数。

应用实例2:定义带有固定参数和关键字参数的函数

我们还可以将**kwargs与常规参数一起使用,例如:

def myfunc(name, **kwargs):
    print(name, kwargs)

myfunc('Tom', a=1, b=2, c=3)    # Tom {'a': 1, 'b': 2, 'c': 3}

上面的代码中,我们定义了一个函数myfunc,它接受一个字符串参数name和任意个数的关键字参数,并将它们作为字典输出。

综上所述,带星号(*)的函数参数可以灵活地处理不确定数量的参数,能够简化代码并节省时间。