Python学习13.06:Python函数默认参数设置(超级详细)

咱们知道,在调用函数时,若是不指定某个参数,解释器会抛出异常。为了解决这个问题,Python 容许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值,这样的话,即使调用函数时没有给拥有默认值的形参传递参数,该参数能够直接使用定义函数时设置的默认值。

定义带有默认值参数的函数,其语法格式以下:python

def 函数名(...,形参名=默认值):
    代码块

注意,在使用此格式定义函数时,指定有默认值的形式参数必须在全部没默认值参数的最后,不然会产生语法错误

例如,以下程序为 name、message 形参指定了默认值:函数

# 为两个参数指定默认值
def say_hi(name = "孙悟空", message = "欢迎来到C语言中文网"):
    print(name, ", 您好")
    print("消息是:", message)

# 所有使用默认参数
say_hi()
# 只有message参数使用默认值
say_hi("白骨精")
# 两个参数都不使用默认值
say_hi("白骨精", "欢迎学习Python")
# 只有name参数使用默认值
say_hi(message = "欢迎学习Python")

运行结果为:学习

孙悟空 , 您好
消息是: 欢迎来到C语言中文网
白骨精 , 您好
消息是: 欢迎来到C语言中文网
白骨精 , 您好
消息是: 欢迎学习Python
孙悟空 , 您好
消息是: 欢迎学习Python

从上面程序能够看出,若是只传入一个位置参数,因为该参数位于第一位,系统会将该参数值传给 name 参数。所以,不能按以下方式调用 say_hi() 函数:spa

say_hi("欢迎学习Python")

上面调用时传入的“欢迎学习Python”字符串将传给 name 参数,而不是 message 参数。

更不能按以下方式来调用 say_hi() 函数:.net

say_hi(name="白骨精", "欢迎学习Python")

由于 Python 规定,关键字参数必须位于位置参数的后面。所以提示错误:positional argument follows keyword argument。

那么,能不能单纯地将上面两个参数交换位置呢?code

say_hi("欢迎学习Python" , name="白骨精")

上面调用依然是错误的,由于第一个字符串没有指定关键字参数,所以将使用位置参数为 name 参数传入参数值,第二个参数使用关键字参数的形式再次为 name 参数传入参数值,这意味着两个参数值其实都会传给 name 参数,程序为 name 参数传入了多个参数值。所以提示错误:say_hi() got multiple values for argument 'name'。

将函数调用改成以下两种形式是正确的:ip

say_hi("白骨精", message="欢迎学习Python")
say_hi(name="白骨精", message="欢迎学习Python")

上面第一行代码先使用位置参数为 name 参数传入参数值,再使用关键字参数为 message 参数传入参数值;第二行代码中的 name、message 参数都使用关键字参数传入参数值。

再次强调,因为 Python 要求在调用函数时关键字参数必须位于位置参数的后面,所以在定义函数时指定了默认值的参数(关键字参数)必须在没有默认值的参数以后。例如以下代码:字符串

# 定义一个打印三角形的函数,有默认值的参数必须放在后面
def printTriangle(char, height = 5) :
    for i in range(1, height + 1) :
        # 先打印一排空格
        for j in range(height - i) :
            print(' ', end = '')
        # 再打印一排特殊字符
        for j in range(2 * i - 1) :
            print(char, end = '')
        print()


printTriangle('@', 6)
printTriangle('#', height=7)
printTriangle(char = '*')

上面程序定义了 printTriangle() 函数,其中,有默认值的 height 形参,必须放在 char 形参的后面;反之,将会形成语法错误。get

在 Python 中,能够使用“函数名.__defaults__”查看函数的默认值参数的当前值,其返回值是一个元组。例如,显示上面定义的 printTriangle 函数的默认值参数的当前值,能够使用 printTriangle.__defaults__ ,其结果为 (5,)。 it

相关文章
相关标签/搜索