Python函数默认参数设置
1、上面的调用仍然是错误的,因为第一个字符串没有指定关键字参数,所以位置参数用于传递name参数的参数值,第二个参数使用keyword参数再次为name参数传递参数值。这意味着这两个参数值实际上都传递给name参数,并且程序为name参数传入多个参数值。因此,会提示一个错误:say hi()为参数“name”获取了多个值。
2、在某些情况下,程序在定义函数时需要为一个或多个参数指定一个默认值,以便在调用函数时省略为该参数传入的参数值,并直接使用该参数的默认值。为参数指定默认值的语法格式如下:
3、从上面的语法格式可以看出,形式参数的默认值遵循形式参数,中间用“=”分隔。例如,以下程序指定名称和消息参数的默认值:
4、Say是在上面的程序中定义的,hi()函数指定name和message参墙绅褡孛数的默认值,所以Say在程又挨喁钒序中是第一次调用的,hi()函数没有为name和message参数指定参数值,name和message参数将使用它们的默认值。程序调用时假设第二次调用hi()函数为name参数指定参数值(使用位置参数),消息参数将使用默认值。程序调用称为第三次,hi()函数指定name和message参数的参数值(使用location参数),因此这两个参数使用开发人员传递的参数值。程序调用称为第四次,hi()函数只传递消息参数的参数值(使用关键字参数),name参数将使用默认值。运行上述程序,可以看到以下输出结果:
5、从上面的程序可以看出,如果只传入一个位置参数,那么系统会将参数值传递给name参数,因为该参数位于第一位。因此,我们不能调用say as follow_Hi()函数:
6、在上述调用时传入的“welcottopython”字符串被传递给name参数,而不是message参数。我们不能调用say as following\uhi()函数:
7、因为Python指定关键字参数必须跟在位置参数之后。因此,会提示一个错误:正参数跟在关键字参数后面。那么,我们可以简单地切换上述两个参数的位置吗?
8、将函数调用更改为以下两种形式是正确的:
9、在上面的第一行代码中,location参数用于输入name参数的参数值,然后使用keyword参数传入message参数的参数值;在第二行中,name和message参数使用keyword参数传入参数值。因为Python要求在调用函数时关键字参数必须在位置参数之后,因此在定义函数时,指定默认值(keyword parameter)的参数必须在参数之后,而不是默认值。例如,以下代码:
10、上面的程序定义了两个printtriangle()函数。此函数的第一个char参数没有默认值,第二个height参数具有默认值。在上面的程序中第一次调用printtriangle()时,程序使用char和height两个位置参数传入参数值,这当然是允许的;第二次调用printtriangle()时,位置参数用于第一个参数,然后将参数值传递给char参数,关键参数是height,因为第二个参数参数传入了参数值,这也是允许的。第三次调用printtriangle()时,只使用keyword parameter为char参数传入参数值。在本例中,height参数将使用默认值,该值符合语法。