当前位置:  首页>> 技术小册>> Python编程轻松进阶(四)

10.3 函数的形参和实参

在Python编程中,函数是组织代码、实现特定功能的基本单元。函数通过接收输入(称为参数)并返回输出(称为返回值)来执行其定义的任务。理解函数的形参(形式参数)和实参(实际参数)之间的关系,是掌握函数编程的关键一步。本章节将深入探讨这一核心概念,并通过实例展示如何在Python中有效地利用形参和实参。

10.3.1 形参(Formal Parameters)

形参是函数定义时用于接收传入值的变量名。在函数体内部,你可以通过形参来引用传入的数据,并执行相应的操作。形参仅在函数被调用时存在,并且其作用域仅限于函数体内。

示例

  1. def greet(name):
  2. """向指定的人打招呼"""
  3. print("Hello, " + name + "!")
  4. # 在这里,'name' 是形参

在上面的例子中,greet 函数定义了一个名为 name 的形参。当调用 greet 函数并传入一个字符串作为参数时,这个字符串值会被赋给 name,然后函数体内部的代码会执行。

10.3.2 实参(Actual Parameters)

实参是调用函数时传递给函数的具体值或表达式。在函数被调用时,实参的值会被传递给对应的形参,然后函数会根据这些值执行其定义的任务。

示例(继续上面的例子):

  1. greet("Alice")
  2. # 在这里,"Alice" 是实参

在这个例子中,"Alice" 是传递给 greet 函数的实参。调用函数时,"Alice" 的值被赋给了函数定义中的形参 name,然后函数打印出 "Hello, Alice!"

10.3.3 位置参数

默认情况下,Python中的函数参数是通过位置来匹配的。也就是说,第一个实参会赋给第一个形参,第二个实参会赋给第二个形参,依此类推。

示例

  1. def add_two_numbers(a, b):
  2. """返回两个数的和"""
  3. return a + b
  4. result = add_two_numbers(5, 3)
  5. print(result) # 输出:8

在这个例子中,53 是实参,它们分别按位置匹配给了 add_two_numbers 函数的形参 ab

10.3.4 关键字参数

除了位置参数外,Python还支持关键字参数。关键字参数允许你通过参数名来传递参数值,这样你就不必担心参数的顺序问题了。

示例

  1. result = add_two_numbers(b=3, a=5)
  2. print(result) # 输出:8

在这个例子中,尽管实参的顺序与形参的定义顺序不同,但通过使用关键字参数,我们仍然可以正确地传递值并得到预期的结果。

10.3.5 默认参数

在函数定义时,你可以为形参指定默认值。如果调用函数时没有为这些形参提供实参,那么就会使用默认值。

示例

  1. def greet_with_greeting(name, greeting="Hello"):
  2. """使用指定的问候语向人打招呼"""
  3. print(greeting + ", " + name + "!")
  4. greet_with_greeting("Bob") # 输出:Hello, Bob!
  5. greet_with_greeting("Charlie", "Hi") # 输出:Hi, Charlie!

在这个例子中,greeting 形参有一个默认值 "Hello"。当调用 greet_with_greeting 函数时没有提供 greeting 实参时,就会使用默认值 "Hello"

10.3.6 可变参数

有时,我们不知道函数将接收多少个参数。Python提供了两种机制来处理这种情况:*args 用于处理非关键字可变参数,**kwargs 用于处理关键字可变参数。

  • *args:允许你将一个不定长度的参数列表传递给函数。这些参数在函数内部会被封装成一个元组。

示例

  1. def sum_numbers(*args):
  2. """计算任意多个数的和"""
  3. total = 0
  4. for num in args:
  5. total += num
  6. return total
  7. print(sum_numbers(1, 2, 3, 4)) # 输出:10
  • `kwargs`**:允许你传递任意数量的关键字参数。这些参数在函数内部会被封装成一个字典。

示例

  1. def create_user(**kwargs):
  2. """根据关键字参数创建用户信息"""
  3. for key, value in kwargs.items():
  4. print(f"{key}: {value}")
  5. create_user(name="John", age=30, city="New York")
  6. # 输出:
  7. # name: John
  8. # age: 30
  9. # city: New York

10.3.7 参数解包

在调用函数时,你也可以使用 *** 来解包列表、元组或字典,作为位置参数或关键字参数传递。

示例

  1. nums = [1, 2, 3, 4]
  2. print(sum_numbers(*nums)) # 输出:10
  3. user_info = {"name": "Jane", "age": 28, "email": "jane@example.com"}
  4. create_user(**user_info)
  5. # 输出:
  6. # name: Jane
  7. # age: 28
  8. # email: jane@example.com

总结

函数的形参和实参是Python编程中的基础且核心概念。形参定义了函数接收输入的方式,而实参则是调用函数时传递给函数的具体值。通过理解位置参数、关键字参数、默认参数、可变参数以及参数解包等特性,你可以编写出更加灵活和强大的函数,以应对复杂的编程需求。希望本章节的内容能够帮助你更好地掌握这一重要概念,并在你的Python编程之旅中助你一臂之力。


该分类下的相关小册推荐: