Python入门教程第23篇 函数之默认参数

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第23篇 函数之默认参数相关的知识,希望对你有一定的参考价值。

本篇我们将会学习如何利用 Python 函数的默认参数简化函数调用。

函数默认参数

当我们定义函数时,可以为参数指定一个默认值。指定参数默认值的语法如下:

def function_name(param1, param2=value2, param3=value3, ...):

在以上语法中,我们使用赋值运算符(=)为某些参数(param2、param3 等)指定了默认值(value2、value3 等)。

调用函数时,如果传递了实参,函数将会使用实际传递的数据,而不是参数的默认值。但是,如果省略了某些参数,函数将会使用它们的默认值;如果没有定义默认值,将会返回语法错误。

为了使用默认值,我们需要将具有默认值的参数放在其他参数之后;否则,创建函数时将会返回语法错误。例如,以下是一个错误语法:

def function_name(param1=value1, param2, param3):

默认参数示例

以下示例定义了 greet() 函数,用于返回一个问候信息:

def greet(name, message='Hi'):
    return f"message name"

greet() 函数包含两个参数:name 和 meassage。同时,参数 message 拥有一个默认值“Hi”。

以下示例调用了 greet() 函数,调用时传递了两个实参:

def greet(name, message='Hi'):
    return f"message name"

greeting = greet('John', 'Hello')
print(greeting)

输出的结果如下:

Hello John

由于我们调用函数 greet() 时传递了两个参数,因此函数使用了传递的数据,而不是默认值(“Hi”)。

以下示例调用 greet() 函数时没有传递第二个参数:

def greet(name, message='Hi'):
    return f"message name"

greeting = greet('John')
print(greeting)

输出结果如下:

Hi John

在上面的示例中,greet() 函数使用了参数 message 的默认值。

多个默认参数

以下示例重新定义了 greet() 函数,两个参数都设置了默认值:

def greet(name='there', message='Hi'):
    return f"message name"

以下示例调用了 greet() 函数,调用时没有传递任何参数:

def greet(name='there', message='Hi'):
    return f"message name"

greeting = greet()
print(greeting)

输出结果如下:

Hi there

如果想要调用 greet() 函数返回字符串“Hello there”,可以尝试以下调用方式:

def greet(name='there', message='Hi'):
    return f"message name"

greeting = greet('Hello')
print(greeting)

不过,以上代码返回的结果并非我们预期的信息:

Hi Hello

原因在于,当我们传递一个“Hello”参数时,greet() 函数会将它作为第一个参数,而不是第二个参数。

为了解决这个问题,我们可以使用关键字参数(keyword argument)调用 greet() 函数:

def greet(name='there', message='Hi'):
    return f"message name"

greeting = greet(message='Hello')
print(greeting)

输出结果如下:

Hello there

下一篇我们将会介绍函数的关键字参数。

总结

  • 使用 Python 默认参数可以简化函数调用。
  • 默认参数需要写在非默认参数之后。

以上是关于Python入门教程第23篇 函数之默认参数的主要内容,如果未能解决你的问题,请参考以下文章

Python入门教程第59篇 函数进阶之可变参数

Python入门教程第61篇 函数进阶之偏函数

Python入门教程第62篇 函数进阶之类型提示

Python入门教程第27篇 函数之文档注释

Python入门教程第58篇 函数进阶之元组解包

ES6 从入门到精通系列学习笔记 23 篇(完结)