Python中的def函数

2025年9月3日 | 阅读 11 分钟

因其简洁性。Python 的一个基本构建块是 def 语句,用于定义函数。在任何编程语言中,函数概念都是一项基本要求,因为它们允许将代码封装成可重用的单元。

简单来说,函数可以被描述为一个用于执行特定任务的代码块。函数增加了应用程序的模块化能力,并增加了应用程序代码被重用的机会。除了内置函数print()len()range()之外,Python 还支持使用 def 语句创建的用户定义函数。

什么是 'def' 关键字?

Python中,我们使用关键字 'def' 来创建函数。函数以特定的格式定义,如下所示:

语法

其中

  • def:这是 Python 中用于定义函数的保留字。
  • function_name:函数的名称。与变量名一样,函数名应有意义且具有描述性。函数名可以用字母书写,名称中的第一个字母小写,其他单词用下划线连接。
  • Parameters:这是定义函数名称的部分。函数名应自描述,并必须使用与变量名相同的标准,即小写,并用下划线分隔。
  • docstring:可选。它描述了给定函数的参数。这些是在调用此函数时(如果调用)将接收值的“框”。
  • Function body:代码的这一部分执行函数的功能。它在每次执行给定函数时执行操作。
  • Return:可选。这是一个结束函数的语句,可以向用户返回一些内容。如果函数像这样定义,那么该函数将向所有没有 return 语句的情况返回 None 值。

使用 def 关键字定义简单函数

首先,让我们概述一个提供简单问候语输出的标准函数:

示例

编译并运行

输出

Hello, welcome to Python programming!

说明

在这种情况下,我们创建了一个名为 greet 的函数,它不接受任何输入。函数体中有一个 print 语句,用于输出问候消息。要运行函数,只需使用其名称后跟括号 () 来调用它。

理解函数参数和实参

函数可以通过方法调用接受参数,这些参数是传递给函数的值。函数可以使用提供的参数来更改其行为。

位置参数

位置参数是最常用的参数类型。它们按照定义的顺序发送到函数。

示例

编译并运行

输出

Hello, Alice! Welcome to Python programming.

说明

在此示例中,greet 函数有一个输入,即 name。调用函数时,我们使用 "Alice" 的值,该值被分配给 name 输入。

默认参数

可以使用默认参数为参数设置默认值,这使得用户可以选择省略某些详细信息。

示例

编译并运行

输出

Hello, Guest! Welcome to Python programming.

说明

在这种情况下,name 参数具有默认值 "Guest"。因此,如果在函数调用过程中没有提供实参,则将给定的默认值分配给 name 变量。

关键字参数

作为Python的一个显著特性,关键字参数允许用户指定参数名称和值,从而提高了函数调用的清晰度,并允许按任何顺序提供参数。

示例

编译并运行

输出

Hello, Alice! How are you today?

说明

在这个示例中,关键字参数被用于以非传统顺序提供 name 和 message 参数。

任意参数

如果你想编写一个可以接收无限数量参数的函数,你可以很容易地通过使用 *args 来处理位置参数,并通过 **kwargs 来处理关键字参数。

示例

编译并运行

输出

Hello, Alice! Welcome to Python programming.
Hello, Bob! Welcome to Python programming.
Hello, Charlie! Welcome to Python programming.

说明

在这个实例中,greet 函数接受任意数量的位置参数,这些参数在名为 names 的元组中接收。

返回值

调用程序可以通过 return 语句接收来自函数的值。通过 return 语句返回的任何值都可以用于后续计算,或者存储在变量中。

示例

编译并运行

输出

The sum is 8

说明

在这种情况下,add 函数包含两个参数:a 和 b,并返回它们的和。返回的值存储在 result 变量中,然后打印出来。

返回多个值

通过用逗号分隔,函数可以返回多个值。这些值将作为元组返回给程序。

示例

编译并运行

输出

Sum: 14, Difference: 6

说明

在这个特定示例中,calculate 函数返回两个整数的和与差。返回的值然后打包到 sum_result 和 diff_result 中。

变量的作用域和生命周期

在编程中,这一定义非常模糊,有时会导致错误;它是代码中可以访问的区域或范围。在 Python 中,在函数内部定义的变量是该函数的局部变量,外部变量无法与其交互。反之亦然。但是,在任何函数外部定义的变量都是全局变量,可以在整个程序中访问。

示例

编译并运行

输出

Inside function: x = 10, y = 5
Outside function: x = 10

说明

在这个特定示例中,x 是一个全局变量,而 y 是在名为 my_function 的函数的作用域内定义的局部变量。如果你尝试在函数作用域外访问 y,将会导致错误。

Lambda 函数

就像使用 def 关键字声明函数一样,Lambda 函数是简洁的匿名函数,也就是说它们是没有名称的函数。它们用于简化和精简短任务。它有助于提高程序的清晰度。

我们可以将 Lambda 函数与

  • 条件检查
  • 列表推导式
  • if-else
  • 多个语句
  • Filter() 函数
  • Map() 函数
  • Reduce() 函数

语法

以下是 Python 中 Lambda 函数的语法:

参数

  • Lambda 是定义函数的关键字。
  • Arguments 是输入参数,它们是以逗号分隔的列表。
  • Expression 是被求值并返回的实体。

让我们通过示例了解 Lambda 函数的实际用例:

示例

下面是一个将 10 加到参数 x 的示例:

示例

编译并运行

输出

#value of n

20

说明

在此示例中,'x' 是 lambda 函数的输入参数,x + 10 是被求值的表达式。我们传递了 x 的值并打印了结果输出。

递归函数

在 Python 中,函数能够调用其他函数,或者在某些情况下调用自身,这被称为递归。递归函数对于可以分解为相似子问题的问题非常有效。递归函数最常见的例子之一是查找阶乘数。

示例

编译并运行

输出

The factorial of 5 is 120

说明

在这种情况下,factorial 函数以 n - 1 的值递归地调用自身,直到达到 n == 1 的基本情况。递归函数总是需要一个基本情况来防止无限递归,而无限递归最终可能导致堆栈溢出。

嵌套函数 (Nested Functions)

嵌套函数是在另一个函数内部定义的函数,这是 Python 提供的一项功能。这些内部函数的作用域限于封闭的外部函数,并且在内部函数处理外部函数的特定详细信息时很有用。

示例

编译并运行

输出

The result is 20

说明

在此示例中,outer_function 包含 inner_function,该函数将值 x 乘以 2。新函数不能在 outer_function 中使用,确保其作用域受到限制。

装饰器

装饰器使得在不更改函数实际代码的情况下增强 Python 中函数的功能成为可能。装饰器是一个接受另一个函数作为参数的函数,它创建了一个具有扩展或修改功能的包装器函数。

示例

编译并运行

输出

Something is happening before the function is called.
Hello!
Something is happening after the function is called.

说明

在此实例中,say_hello 函数使用 @ 形式接收 my_decorator。现在,say_hello 的工作方式是,在函数本身运行之前和之后都会执行装饰器中的逻辑。

使用函数时的最佳实践

  • 描述性名称:创建能够准确解释函数执行任务的函数名称
  • 单一职责:每个函数都应完成一项任务。此原则增强了代码的可修改性
  • 文档字符串:使用文档字符串指定函数的详细信息,例如执行的常规操作、使用的参数和返回的值
  • 避免全局变量:函数应几乎不使用全局变量,以避免副作用问题
  • 保持函数简短:函数应简短且具体。如果函数包含太多信息,请考虑将其分解为几个更小的函数。

理解类中 def 关键字的用法

在 Python 中,def 关键字有多种用途。除了定义函数之外,def 关键字还可以用于在类中定义方法。方法是与对象关联的函数,并通过类实例来调用。

使用类中的 def 关键字,我们可以定义可以访问和修改类及其实例的属性的方法。

让我们考虑以下说明相同内容的示例

示例

编译并运行

输出

Name - Denis, Class - XI and Roll Number - 6.

说明

在此示例中,我们定义了一个名为 Student 的类。在此类中,我们使用 def 关键字定义了构造函数来初始化类的不同属性。然后,我们使用 def 关键字定义了 greet() 方法来打印问候消息。然后,我们创建了 Student 类的实例并调用了 greet() 方法来显示该对象的问候消息。

lambda 和 def 关键字之间的区别

Lambda 函数def 函数
它包含一个 lambda 的单一表达式它包含多行代码。
它是匿名的,即没有名称它必须有一个名称
它只有一个表达式语句。它可以包含许多语句。
它最适合临时和简短的函数。它适用于代码中复杂且可重用的逻辑。

结论

我们深入学习了 def 函数。def 关键字是 Python 中的保留关键字,用于定义函数。我们学习了函数。函数可以接受参数,这些参数是通过方法调用传递给函数的。有两种类型的实参:*args 允许传递可变数量的位置参数,以及 **kwargs:此关键字允许传递可变数量的关键字参数。然后,我们学习了 Lambda 函数以及它们与 def 函数的区别。

Python 中 def 函数的常见问题解答

1. 什么是 Python 函数?

Python 中的函数可以被描述为一个用于执行特定任务的代码块。函数增加了应用程序的模块化能力,并增加了应用程序代码被重用的机会。

2. 如何在 Python 中定义函数?

我们可以使用 def 关键字,它是 Python 中用于定义函数的保留关键字。

代码

3. 函数可以接受参数吗?

是的,函数可以在括号中接受参数。让我们看一个例子:

代码

输出

8

4. 参数和实参之间有什么区别?

  • 参数:参数是我们在函数中放置的变量。
  • 实参:实参是我们调用函数时提供的实际值。

5. *args 和 **kwargs 是什么?

*args:此关键字允许传递可变数量的位置参数。

**kwargs:此关键字允许传递可变数量的关键字参数。

6. 函数中的 return 和 print() 有什么区别?

  • return:return() 函数将一个值返回给调用者。
  • print():print() 函数仅显示输出;它不存储或返回输出。

7. 什么是 lambda 函数?

Lambda 函数是简洁的匿名函数;它们用于简化和精简短任务,并有助于提高程序的清晰度。

语法


下一主题Python 模块