Python函数参数中的和*运算符用于定义可接受任意数量的位置参数和关键字参数。
*运算符
在函数定义时使用*运算符,表示该函数可接受任意数量的位置参数。位置参数是指不带关键字的函数参数。例如:
def foo(*args):
print(args)
foo(1, 2, 3) # 输出结果为(1, 2, 3)
在上面的示例中,我们定义了一个名为foo
的函数,并使用*args来接受任意数量的位置参数,我们调用函数foo时,传递了三个位置参数1、2和3,函数会自动将这三个参数封装到元组args中,并输出args的值。
当函数既有位置参数,又有args时,args需要在所有位置参数的后面:
def bar(a, b, *args):
print(a, b, args)
bar(1, 2, 3, 4, 5) # 输出结果为1 2 (3, 4, 5)
在上面这个示例中,我们定义了一个名为bar
的函数,并使用a、b作为位置参数,使用*args接受任意数量的位置参数,当调用bar
函数并传递1、2、3、4、5这五个参数给它时,a会被赋值为1,b会被赋值为2,而剩下的三个参数3、4、5会被封装为一个元组,被赋值给args,并一起输出。
**运算符
在函数定义时使用**运算符,表示该函数可接受任意数量的关键字参数。关键字参数是指带关键字的函数参数。例如:
def foobar(**kwargs):
print(kwargs)
foobar(a=1, b=2, c=3) # 输出结果为{'a': 1, 'b': 2, 'c': 3}
在上面的示例中,我们定义了一个名为foobar
的函数,并使用**kwargs来接受任意数量的关键字参数,函数会自动将这些关键字参数封装到一个字典中,并输出该字典。当我们调用函数foobar并传入关键字参数a、b、c对应的值1、2、3时,kwargs会被赋值为一个字典,包含三个键值对{'a': 1, 'b': 2, 'c': 3},并输出。
当函数既有位置参数,又有**kwargs时,需要按照以下顺序定义参数:
def foobar2(a, b, **kwargs):
print(a, b, kwargs)
foobar2(1, 2, x=3, y=4, z=5) # 输出结果为1 2 {'x': 3, 'y': 4, 'z': 5}
在上面这个示例中,我们定义了一个名为foobar2
的函数,并使用a、b作为位置参数,使用**kwargs接受任意数量的关键字参数,当调用foobar2
函数并传递1、2、x=3、y=4、z=5这五个参数给它时,a会被赋值为1,b会被赋值为2,而剩下的三个参数x、y、z会被封装为一个字典,被赋值给kwargs,并一起输出。
通过上面的两个示例,我们可以看到使用和*运算符可以大大简化函数定义,并使我们不必关心究竟有多少个参数需要传递给函数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python函数参数中的*与**运算符 - Python技术站