Python中有时会有需要传入不定数量的参数给函数,这时就需要使用不定长参数。本文将详细讲解Python函数中不定长参数的写法,包括位置参数、关键字参数、强制关键字参数等。并且,我们将提供两个示例来帮助您更好地理解这个概念。
位置参数
位置参数其实就是Python中最基本的、最常用的参数类型。它指的是在函数定义中指定的参数,也就是通过位置来匹配实参的方式进行传递的参数。当我们不确定要传递多少个参数时,可以使用位置参数。
位置参数的写法如下:
def demo(*args):
print(args)
这里,我们定义了一个名为demo
的函数,并使用*args
来表示不定长度的位置参数。当我们以类似demo(1, 2, 3)
的方式调用函数时,传递给demo
函数的参数就会被打包成一个元组(1, 2, 3)
。这个元组可以在函数中使用。例如,我们运行以下代码:
def demo(*args):
print(args)
demo(1, 2, 3)
输出结果:
(1, 2, 3)
这个例子表明,我们可以通过使用*args
来传递不定数量的位置参数。
关键字参数
关键字参数指的是通过关键字传递给函数的参数。这个参数类型在函数参数中的前面指定了形式参数的名字,变量名和值之间用=
分隔。在函数调用时,我们可以使用关键字带着值的方式来传递参数。
关键字参数的写法如下:
def demo(**kwargs):
print(kwargs)
我们使用两个星号**
来表示字典关键字参数kwargs
。这些关键字和对应的值都会被打包成一个字典,并可以在函数中使用。例如,我们运行以下代码:
def demo(**kwargs):
print(kwargs)
demo(name='Tom', age=18)
输出结果:
{"name": "Tom", "age": 18}
这个例子展示了我们可以使用关键字方式传递不定数量的关键字参数。
强制关键字参数
Python3.0中新引入的语法,指的是使用*
后面的参数必须使用关键字传递。
强制关键字参数的写法如下:
def demo(name,*,age):
print(name, age)
这里我们在name
后面使用了一个*
来分割位置参数和强制关键字参数。这样,我们就可以强制关键字参数不能被做为位置参数来传递,必须使用关键字名字和对应的值来传递。例如,我们运行以下代码:
def demo(name,*,age):
print(name, age)
demo("Tom", age=18)
输出结果:
Tom 18
如果我们尝试使用位置参数来传递age
,就会得到一个TypeError错误:
def demo(name,*,age):
print(name, age)
demo("Tom", 18)
# TypeError: demo() takes 1 positional argument but 2 were given
这个错误意味着我们只需要给函数传递一个位置参数,但是我们却传递了两个参数。
示例一
使用位置参数和关键字参数的组合,编写一个函数,用来计算不定数量的数字之和,其中,函数的形式参数应该是位置参数和关键字参数的混合形式。
def sum(*args, **kwargs):
total = 0
for num in args:
total += num
for num in kwargs.values():
total += num
return total
print(sum(10, 20, a=5, b=10)) # 45
这个函数利用了位置参数与关键字参数的优点,可以同时接收任意数量的位置参数和关键字参数,以计算它们的和。
示例二
使用强制关键字参数和位置参数混合的形式,编写一个函数,用来返回两个数的积,其中,第二个参数必须作为强制关键字参数传递。
def multiply(a, *, b):
return a * b
print(multiply(2, b=3)) # 6
print(multiply(2, 3)) # TypeError: multiply() takes 1 positional argument but 2 were given
这段代码展示了一个函数multiply
,它接收两个参数a
和b
。在函数定义中,我们把*
写在了b
的前面,这样就强制让b
参数必须使用关键字参数来传递。当我们调用multiply(2, b=3)
时,就会返回2和3的积,即6。当我们尝试使用位置参数来传递b
时,就会得到一个TypeError错误。
以上就是关于Python函数中不定长参数的写法,包括位置参数、关键字参数、强制关键字参数等的完整攻略。希望这篇文章能够帮助到您。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python函数中不定长参数的写法 - Python技术站