关于“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和任意个数的关键字参数,并将它们作为字典输出。
综上所述,带星号(或*)的函数参数可以灵活地处理不确定数量的参数,能够简化代码并节省时间。