一、啥是函数?

函数是编程中的一个重要概念,简单来说,它是一段可以反复使用的代码块。通过函数,我们可以将一段代码打包起来,在需要的时候调用,而不需要每次都重复写代码

举个例子:

假设我们每天都要写类似下面的代码:

print("欢迎光临!")
print("祝您有美好的一天!")

如果有一个地方需要再次打印这些信息,我们就得重新写一遍

使用函数后:

我们可以把这段代码封装在一个函数中,以后只需要调用函数即可:

def welcome():
    print("欢迎光临!")
    print("祝您有美好的一天!")
​
# 调用函数
welcome()

二、函数的组成部分

  1. 函数定义:使用 def 关键字定义一个函数

  2. 函数名:函数的名字,用来标识函数

  3. 参数:传递给函数的信息(可以没有)

  4. 函数体:函数内部要执行的代码

  5. 返回值:函数执行完成后可以返回一个结果(可选)


三、如何定义和调用函数

3.1 定义函数

函数的基本语法如下:

def 函数名(参数1, 参数2, ...):
    """这是函数的说明文档(可选)"""
    函数体
    return 返回值(可选)

3.2 调用函数

在定义函数后,可以通过函数名加括号的方式调用


示例 1:定义一个简单函数

def greet():
    """打印欢迎语"""
    print("你好!欢迎学习 Python!")
​
# 调用函数
greet()

运行结果:

你好!欢迎学习 Python!

示例 2:带参数的函数

def greet(name):
    """接收一个名字,打印欢迎语"""
    print(f"你好, {name}!欢迎学习 Python!")
​
# 调用函数时传递参数
greet("李华")

运行结果:

你好, 李华!欢迎学习 Python!

示例 3:带返回值的函数

def add(a, b):
    """接收两个数字,返回它们的和"""
    return a + b
​
# 调用函数
result = add(5, 3)
print(f"两个数的和是:{result}")

运行结果:

两个数的和是:8

四、函数的参数

4.1 什么是参数?

参数是我们传递给函数的输入值,用来让函数处理不同的内容

4.2 参数的类型

  1. 位置参数:按顺序传递的参数

  2. 默认参数:给参数设置默认值,如果调用时未提供该参数,就会使用默认值

  3. 可变长度参数:

    • *args:接收任意数量的位置参数

    • **kwargs:接收任意数量的关键字参数


4.3 参数的示例

1. 位置参数
def subtract(a, b):
    """减法函数"""
    return a - b

print(subtract(10, 3))  # 输出 7
print(subtract(3, 10))  # 输出 -7

2. 默认参数
def greet(name="朋友"):
    print(f"你好, {name}!")

greet()             # 使用默认值,输出 "你好, 朋友!"
greet("小明")        # 覆盖默认值,输出 "你好, 小明!"

3. 可变长度参数
# 使用 *args 处理多个位置参数
def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3, 4))  # 输出 10
# 使用 **kwargs 处理多个关键字参数
def show_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

show_info(name="小明", age=20, city="上海")

运行结果:

name: 小明
age: 20
city: 上海

五、函数的返回值

5.1 什么是返回值?

函数执行完成后,可以通过 return 把结果返回给调用者。如果函数没有 return,它会默认返回 None

5.2 返回值示例

def multiply(a, b):
    """计算两个数的乘积"""
    return a * b

result = multiply(3, 5)
print(f"结果是:{result}")  # 输出 "结果是:15"

5.3 返回多个值

def divide_and_remainder(a, b):
    """返回商和余数"""
    return a // b, a % b

quotient, remainder = divide_and_remainder(10, 3)
print(f"商:{quotient}, 余数:{remainder}")

运行结果:

商:3, 余数:1

六、匿名函数(Lambda)

匿名函数是一种简洁的定义函数方式,常用于临时、简单的函数场景

6.1 Lambda 语法

lambda 参数1, 参数2, ...: 表达式

6.2 示例

# 普通函数
def square(x):
    return x ** 2

# 等价的 Lambda 表达式
square = lambda x: x ** 2

print(square(5))  # 输出 25

七、函数的嵌套与闭包

7.1 函数嵌套

def outer_function():
    def inner_function():
        print("这是内部函数")
    inner_function()

outer_function()

7.2 闭包

闭包是内部函数记住外部函数的变量,即使外部函数执行结束,内部函数依然可以使用这些变量

def outer(x):
    def inner(y):
        return x + y
    return inner

closure = outer(10)
print(closure(5))  # 输出 15

八、装饰器

装饰器是函数的一种高级用法,用于在不改变函数代码的前提下增强函数功能

8.1 示例

def decorator(func):
    def wrapper():
        print("开始执行...")
        func()
        print("执行结束...")
    return wrapper

@decorator
def say_hello():
    print("你好!")

say_hello()

运行结果:

开始执行...
你好!
执行结束...

九、总结

概念

描述

函数定义

使用 def 定义,函数体是执行的代码块

参数

函数可以接收输入,通过位置或关键字传递

返回值

函数可以返回一个或多个结果

Lambda 表达式

简洁定义匿名函数,用于简单逻辑

嵌套函数与闭包

支持函数嵌套,内部函数记住外部函数变量

装饰器

用于增强函数功能,灵活扩展逻辑