在python中,给函数设置多个参数,可以直接把参数写入小括号里,参数之间用逗号隔开即可,例如:
xxxxxxxxxx
21def function(args1,args2,args3,...):
2 pass
需要注意的是,调用函数时,传入的实参的顺序和数量,要跟形参的顺序和数量一样
xxxxxxxxxx
41def function (args1,args2,args3):
2 pass
3
4function(args1,args2,args3)
默认参数指在定义函数的参数时,给参数赋一个值,来给函数的参数提供一个备选方案。这样,当我们调用函数时,如果忘了传入参数,函数就会使用默认参数进行执行。
例如上节课画多边形的代码,我们可以把默认参数设置为3,这样如果调用时,不传参的话:
xxxxxxxxxx
81import turtle
2
3def polygon(sizes=3):
4 for i in range(sizes):
5 turtle.forward(80)
6 turtle.left(360/sizes)
7
8polygon()
程序就会直接画出一个三角形:
如果我们传入参数5的话:
xxxxxxxxxx
81import turtle
2
3def polygon(sizes=3):
4 for i in range(sizes):
5 turtle.forward(80)
6 turtle.left(360/sizes)
7
8polygon(5)
程序就会画出一个五边形:
需要注意的是,设置默认参数时,默认参数的位置要放在非默认参数后面
xxxxxxxxxx
31# y=3是默认参数,要放在非默认参数x的后面
2def name(x,y=3):
3 pass
在定义函数时,我们经常会遇到不确定参数个数的情况,这个时候,我们要使用不定长参数。
不定长参数有两种:
①*args不定长位置参数
args是参数名字,在参数名字前面加一个“*”,表示不定长位置参数,它会把实参中多余的位置参数放入一个元组中,我们可以来看一个例子:
xxxxxxxxxx
81
2def fun(a, b, *args):
3 print(a)
4 print(b)
5 print(args)
6
7print(fun(1,2,3,4))
8
程序的结果会输出:
xxxxxxxxxx
311
22
3(3, 4)
1和2分别赋值给a、b,剩下的参数以元组的形式赋值给args
②**kwargs不定长关键字参数(kwargs是任意参数名)
传递实参时,既然会有位置参数,那么肯定可以有关键字参数。
kwargs是任意参数名,在参数名前面加两个“*”,表示不定长关键字参数,它会把实参中多余的关键字参数放到一个字典中。例如:
xxxxxxxxxx
91def fun(a, b, *args, **kwargs):
2 print(a)
3 print(b)
4 print(args)
5 print(kwargs)
6
7fun(1, 2, 3, 4, name = "hello", age = 20)
8
9
输出结果为:
xxxxxxxxxx
411
22
3(3, 4)
4{'name': 'hello', 'age': 20}
可以看到,多余的关键字参数已经被放在字典中了。
在编程时,有时候有一些函数只是临时一用,而且越逻辑也很简单,就可以使用匿名函数。
匿名函数是一种表达式,它的格式是以lambda作为声明,后面接参数,然后是一个冒号分隔开,冒号后面接表达式。例如:
xxxxxxxxxx
11lambda x,y:x+y
这一个就是表示x+y的一个表达式。
匿名函数没有函数名,调用的时候需要把它传给一个变量,然后直接调用这个变量,并在变量后面用括号携带上参数
xxxxxxxxxx
21fun = lambda x,y:x+y
2print(fun(3,5 ))
程序会输出:
xxxxxxxxxx
118
当我们为函数设置多个参数时,调用的时候可能会经常因为传入错误的参数顺序而发生错误,这个时候,还有一个方法,就是使用关键字参数作为实参。
看下面这个例子,正常的传参排序应该是姓名、年龄、性别:
xxxxxxxxxx
61def info(name,age,sex):
2 print("姓名:"+name)
3 print("年龄:"+str(age))
4 print("性别:"+sex)
5
6info("小明",18,"男")
程序会输出:
xxxxxxxxxx
31姓名:小明
2年龄:18
3性别:男
如果使用关键字参数,则可以改变传参的顺序:
xxxxxxxxxx
61def info(name,age,sex):
2 print("姓名:"+name)
3 print("年龄:"+str(age))
4 print("性别:"+sex)
5
6info(sex="男",age=18,name="小明")
这里我们第一个实参是性别,第二个实参是年龄,第三个实参是姓名,运行程序,依然会输出:
xxxxxxxxxx
31姓名:小明
2年龄:18
3性别:男