Python3 函数

Python3 函数(Functions)


🎯 学习目标

掌握 Python 中函数定义与调用、参数传递方式、返回值机制、作用域规则等基础知识。理解函数在程序模块化、代码复用、逻辑封装等方面的核心作用。能够在实际项目中灵活使用函数构建结构清晰、易于维护的程序。


🔑 核心重点

分类 内容
基本语法 使用 def 定义函数,支持位置参数、关键字参数、默认参数、可变参数
参数传递 支持多种参数形式:位置参数、关键字参数、*args、**kwargs
返回值机制 通过 return 返回结果,可返回多个值
作用域 全局变量、局部变量、nonlocal、global 的使用和影响范围
实际应用场景 数据处理、业务逻辑封装、模块化开发、高阶函数调用等

📚 详细讲解

一、什么是函数?

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码块。

✅ 基本语法:

def function_name(parameters):
    """函数文档字符串"""
    # 函数体
    return value

二、定义与调用函数

✅ 示例1:最简单的函数

def greet():
    print("Hello, Python!")

greet()  # 调用函数

✅ 示例2:带参数的函数

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

greet("Alice")

三、参数类型详解

1. 位置参数(Positional Arguments)

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

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

2. 关键字参数(Keyword Arguments)

def describe_pet(animal_type, pet_name):
    print(f"I have a {animal_type} named {pet_name}.")

describe_pet(pet_name="Whiskers", animal_type="cat")

3. 默认参数(Default Arguments)

def describe_pet(pet_name, animal_type="dog"):
    print(f"I have a {animal_type} named {pet_name}.")

describe_pet("Buddy")  # 默认为 dog

📌 注意:默认参数只在定义时计算一次,不要使用可变对象作为默认参数(如列表)。

4. 可变参数(*args 和 **kwargs)

  • *args:接收任意数量的位置参数,打包成元组
  • **kwargs:接收任意数量的关键字参数,打包成字典
def my_function(*args, **kwargs):
    print("位置参数:", args)
    print("关键字参数:", kwargs)

my_function(1, 2, 3, name="Alice", age=25)

📌 输出:

位置参数: (1, 2, 3)
关键字参数: {'name': 'Alice', 'age': 25}

四、返回值(Return Value)

函数可以通过 return 返回一个或多个值。

✅ 示例1:单个返回值

def square(x):
    return x * x

result = square(4)
print(result)  # 输出 16

✅ 示例2:多个返回值(本质是返回一个元组)

def get_user_info():
    return "Alice", 25, "Beijing"

name, age, city = get_user_info()
print(f"{name}, {age}, {city}")

五、函数的作用域(Scope)

Python 中有四种作用域层级:

  1. L(Local)局部作用域
  2. E(Enclosing)嵌套函数外层作用域
  3. G(Global)全局作用域
  4. B(Built-in)内置作用域

✅ 示例:

x = "global"

def outer():
    x = "enclosing"
    
    def inner():
        x = "local"
        print(x)  # local
    
    inner()
    print(x)  # enclosing

outer()
print(x)  # global

✅ 使用 global 修改全局变量

count = 0

def increment():
    global count
    count += 1

increment()
print(count)  # 输出 1

✅ 使用 nonlocal 修改嵌套函数外变量

def outer():
    x = "original"
    
    def inner():
        nonlocal x
        x = "modified"
    
    inner()
    print(x)  # modified

outer()

六、函数作为对象(First-Class Citizens)

在 Python 中,函数是一等公民,可以像变量一样使用。

✅ 示例1:将函数赋值给变量

def greet():
    print("Hello")

say_hello = greet
say_hello()  # Hello

✅ 示例2:将函数作为参数传递

def apply(func, value):
    return func(value)

def square(x):
    return x * x

print(apply(square, 5))  # 输出 25

⚠️ 注意事项

  • 避免使用可变对象(如列表)作为默认参数
  • 不要在函数内部修改全局变量,除非明确使用 global
  • 尽量避免“副作用”函数(即不返回值而只是改变状态)
  • 文档字符串(docstring)要规范,便于他人理解和 IDE 提示
  • 使用类型提示(Type Hints)提高可读性(如 def func(x: int) -> str:

🧪 实际案例分析

📌 场景:用户信息验证系统

我们希望编写一个函数来验证用户输入的用户名和密码是否合法。

def validate_user(username, password):
    """
    验证用户名和密码是否符合要求。
    
    :param username: 用户名,必须非空且长度 >= 3
    :param password: 密码,必须非空且长度 >= 6
    :return: bool 表示是否通过验证
    """
    if not username or len(username) < 3:
        print("用户名无效,请重新输入!")
        return False
    if not password or len(password) < 6:
        print("密码太短,请重新输入!")
        return False
    return True

# 模拟登录过程
username = input("请输入用户名:")
password = input("请输入密码:")

if validate_user(username, password):
    print("验证成功,欢迎登录!")
else:
    print("验证失败,请检查输入。")

📌 应用

  • 登录系统
  • 输入校验
  • 权限控制
  • 接口封装

🧩 拓展练习(动手实践)

  1. 编写一个函数 factorial(n),计算并返回 n 的阶乘。
  2. 实现一个函数 filter_even(nums),接收整数列表,返回偶数列表。
  3. 编写函数 read_file_lines(filename),逐行读取文件内容并返回生成器。
  4. 设计一个函数 format_time(seconds),将秒数格式化为 “HH:MM:SS” 形式。
  5. 创建一个函数 calculate(operation, a, b),根据 operation 执行加减乘除,并处理除零异常。

📚 推荐阅读


🧭 下一步建议

  • 下一章学习内容:《Python3 高阶函数与装饰器》
  • 掌握 map()filter()reduce() 等高阶函数
  • 学习函数闭包、装饰器原理与自定义装饰器
  • 探索函数式编程思想与柯里化技巧
  • 结合函数与推导式知识,尝试编写结构清晰、功能完整的工具函数库

如果你希望我为你提供:

  • Python 函数速查表 PDF(含参数类型、作用域、返回值等)
  • 更多实战项目练习题(如用户验证系统、计算器、文本处理函数等)
  • 函数高级技巧详解(如偏函数、闭包、装饰器、递归优化等)
  • 视频教学资源推荐(中文讲解)

欢迎随时告诉我 😊

posted @ 2025-05-28 23:00  红尘过客2022  阅读(42)  评论(0)    收藏  举报