函数是 Python 中的基本构建块之一,用于组织代码、提高代码重用性和可读性。在 Python 中,函数是一段可以执行特定任务的代码块,函数可以接受输入(参数),并返回结果(输出)。通过函数,我们可以将复杂的任务分解为更小的部分,使代码更加模块化和可维护。


1. 引言

Python 中的函数允许我们将重复的代码逻辑封装起来,从而避免冗余代码的编写。Python 函数是非常灵活的,可以有不同的参数类型、返回值类型、默认参数等。


2. 函数定义

在 Python 中,定义一个函数非常简单,使用 def 关键字来定义函数。函数定义的基本语法如下:

def function_name(parameters):
    # 执行的代码
    return result

  • def:声明函数。
  • function_name:函数的名字。
  • parameters:函数接受的输入,可以是零个、一个或多个参数。
  • return:函数的返回值。若不指定,函数默认返回 None

示例:

def greet(name):
    print(f"Hello, {name}!")

greet("Alice")  # 输出: Hello, Alice!


3. 参数

函数可以接受不同类型的参数,参数的使用灵活多样。

3.1 必需参数

必须传入的参数,参数的顺序是有要求的。

def add(a, b):
    return a + b

print(add(3, 5))  # 输出: 8

3.2 默认参数

可以为参数指定默认值,调用时可以省略该参数。

def greet(name="Guest"):
    print(f"Hello, {name}!")

greet()  # 输出: Hello, Guest!
greet("Bob")  # 输出: Hello, Bob!

3.3 可变参数

如果不确定传入函数的参数个数,可以使用 *args 来接受可变数量的位置参数,使用 **kwargs 来接收可变数量的关键字参数。

# *args 接收可变数量的位置参数
def sum_numbers(*args):
    return sum(args)

print(sum_numbers(1, 2, 3))  # 输出: 6

# **kwargs 接收可变数量的关键字参数
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=25)  
# 输出:
# name: Alice
# age: 25


4. 返回值

函数可以返回结果,使用 return 语句。一个函数只能返回一个值,但可以是一个复合数据类型(如列表、元组、字典等)。

4.1 返回单个值

def multiply(a, b):
    return a * b

result = multiply(4, 5)
print(result)  # 输出: 20

4.2 返回多个值

Python 支持通过元组返回多个值。

def calculate(a, b):
    sum_result = a + b
    diff_result = a - b
    return sum_result, diff_result

sum_value, diff_value = calculate(10, 5)
print(sum_value, diff_value)  # 输出: 15 5


5. 函数嵌套

函数可以在另一个函数内定义,这种方式叫做嵌套函数。嵌套函数可以访问外部函数的变量。

def outer_function(x):
    def inner_function(y):
        return y + 1
    return inner_function(x)

result = outer_function(5)
print(result)  # 输出: 6


6. 匿名函数(Lambda)

Python 提供了一个简洁的方式来定义简单的函数,叫做匿名函数。通过 lambda 关键字可以定义一个没有名字的函数。

6.1 Lambda 表达式

# 语法: lambda arguments: expression
add = lambda a, b: a + b
print(add(2, 3))  # 输出: 5

6.2 使用 Lambda 函数

lambda 函数常与 map()filter()sorted() 等函数一起使用:

# 使用 lambda 与 map() 函数
numbers = [1, 2, 3, 4]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)  # 输出: [1, 4, 9, 16]

# 使用 lambda 与 sorted() 函数
people = [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Charlie", "age": 20}]
sorted_people = sorted(people, key=lambda person: person["age"])
print(sorted_people)
# 输出: [{'name': 'Charlie', 'age': 20}, {'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]


7. 函数作用域

Python 中有三种作用域:

  1. 局部作用域(Local Scope):函数内部定义的变量。
  2. 嵌套作用域(Enclosing Scope):包含函数的外层函数的作用域。
  3. 全局作用域(Global Scope):脚本中所有函数外部定义的变量。
  4. 内建作用域(Built-in Scope):Python 内置的函数和变量。

7.1 示例:作用域

x = 10  # 全局变量

def outer_function():
    y = 5  # 外部函数变量
    def inner_function():
        z = 2  # 内部函数变量
        print(x, y, z)  # 访问外部和全局变量
    inner_function()

outer_function()


8. 函数装饰器

函数装饰器是 Python 中一个非常强大的功能,允许在不修改函数本身的情况下为函数添加额外的功能。

8.1 简单装饰器示例

def decorator(func):
    def wrapper():
        print("Before function call")
        func()
        print("After function call")
    return wrapper

@decorator
def say_hello():
    print("Hello!")

say_hello()
# 输出:
# Before function call
# Hello!
# After function call


9. 结论

通过函数,我们可以将复杂的任务拆分成更小的模块,从而使代码更具可读性和可维护性。Python 中的函数提供了非常灵活的参数处理、返回值以及嵌套、匿名函数等强大功能。理解并熟练使用函数是编写 Python 程序的基本能力之一。


参考资料:

  1. Python 官方文档 – 函数
  2. Python Lambda 函数