Python函数默认参数设置

在某些情况下,程序需要在定义函数时指定一个或多个形参的默认值,以便在调用函数时省略形参的默认值,而直接使用形参的默认值。
指定形参默认值的语法格式如下:
形式参名=默认值
从以上语法格式可以看出,形参的默认值紧跟形参之后,中间用英语“=”隔开。
例如,以下程序是 name、message 形参指定默认值:
#指定两个参数的默认值
defsay_hi(name="孙悟空",message="欢迎来到C语言中文网"):
print(name,",您好")
print("消息是:",message)
#默认参数全部使用
say_hi()
#只有message参数使用默认值
say_hi("白骨精")
#两个参数都不使用默认值
say_hi("白骨精","欢迎学习Python")
#只有name参数使用默认值
say_hi(message="欢迎学习Python")在上述程序中定义 say_hi() 函数时为 name、message 形参指定了默认值,因此在程序中首次调用 say_hi() 函数时不作为 name、message 此时,参数指定参数值 name、message 其默认值将用于参数。
第二次调用程序 say_hi() 函数时为 name 此时,参数值(使用位置参数)指定 message 默认值将用于参数。
第三次调用程序 say_hi() 函数时为 name、message 所有参数(使用位置参数)都指定了参数值,因此这两个参数都使用开发人员引入的参数值。
第四次调用程序 say_hi() 函数时只为 message 此时,参数(使用关键字参数)传入参数值 name 默认值将用于参数。
在操作上述程序时,可以看到以下输出结果:
你好,孙悟空 消息是:欢迎来到C语言中文网 你好,白骨精 消息是:欢迎来到C语言中文网 你好,白骨精 新闻是:欢迎学习Python 你好,孙悟空 新闻是:欢迎学习Python
从上面的程序可以看出,如果只输入一个位置参数,系统会将参数值传递给参数值,因为参数位于第一位 name 因此,我们不能按以下方式调用参数。 say_hi() 函数:
say_hi("欢迎学习Python")上述调用时传入的“欢迎学习Python”字符串将传递给 name 而不是参数 message 参数。
我们不能用以下方法来调用它 say_hi() 函数:
say_hi(name="白骨精","欢迎学习Python")
因为 Python 关键字参数必须位于位置参数的后面。因此,提示错误:positional argument follows keyword argument。
那么,我们能简单地交换上述两个参数的位置吗?
#say_hi("欢迎学习Python",name="白骨精")上述调用仍然是错误的,因为第一个字符串没有指定关键字参数,所以使用位置参数是 name 参数传入参数值,第二个参数以关键字参数的形式再次出现 name 参数传输到参数值,这意味着两个参数值实际上会传输到 name 参数,程序为 name 多个参数值被引入参数。因此,提示错误:say hi() got multiple values for argument 'name'。
将函数调用改为以下两种形式是正确的:
say_hi("白骨精",message="欢迎学习Python")
say_hi(name="白骨精",message="欢迎学习Python")上述第一行代码首先使用位置参数 name 参数输入参数值,然后使用关键字参数 message 参数传入参数值;第二行代码 name、message 所有参数都使用关键字参数传输到参数值。
由于 Python 调用函数时,关键字参数必须位于位置参数的后面,因此在定义函数时,必须在没有默认值的参数后指定默认值的参数(关键字参数)。例如,以下代码:
#定义一个打印三角形的函数,必须放置有默认值的参数
defprintTriangle(char,height=5):
foriinrange(1,height+1):
#先打印一排空间
forjinrange(height-i):
print('',end='')
#再打印一排特殊字符
forjinrange(2*i-1):
print(char,end='')
print()
printTriangle('@',6)
printTriangle('#',height=7)
printTriangle(char='*')以上程序定义了两个 printTriangle() 函数,这个函数的第一个函数 char 第二个参数没有默认值 height 参数具有默认值。
第一次调用上述程序 printTriangle() 当程序分别使用两个位置参数时 char、height 当然,允许引入参数值;第二次调用 printTriangle() 当第一个参数使用位置参数时,该参数值将被传递给 char 第二个参数使用关键字参数 height 允许参数传入参数值;第三次调用 printTriangle() 只使用关键字参数 char 此时,参数传入参数值 height 符合语法的参数将使用默认值。
