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 中有四种作用域层级:
- L(Local)局部作用域
- E(Enclosing)嵌套函数外层作用域
- G(Global)全局作用域
- 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("验证失败,请检查输入。")
📌 应用:
- 登录系统
- 输入校验
- 权限控制
- 接口封装
🧩 拓展练习(动手实践)
- 编写一个函数
factorial(n)
,计算并返回 n 的阶乘。 - 实现一个函数
filter_even(nums)
,接收整数列表,返回偶数列表。 - 编写函数
read_file_lines(filename)
,逐行读取文件内容并返回生成器。 - 设计一个函数
format_time(seconds)
,将秒数格式化为 “HH:MM:SS” 形式。 - 创建一个函数
calculate(operation, a, b)
,根据 operation 执行加减乘除,并处理除零异常。
📚 推荐阅读
- Python 官方文档 - 函数定义
- 《流畅的 Python》第 3 章 - 函数是对象
- 廖雪峰 Python 教程 - 函数
- 菜鸟教程 - Python 函数
- Real Python - Functions in Python
🧭 下一步建议
- 下一章学习内容:《Python3 高阶函数与装饰器》
- 掌握
map()
、filter()
、reduce()
等高阶函数 - 学习函数闭包、装饰器原理与自定义装饰器
- 探索函数式编程思想与柯里化技巧
- 结合函数与推导式知识,尝试编写结构清晰、功能完整的工具函数库
如果你希望我为你提供:
- Python 函数速查表 PDF(含参数类型、作用域、返回值等)
- 更多实战项目练习题(如用户验证系统、计算器、文本处理函数等)
- 函数高级技巧详解(如偏函数、闭包、装饰器、递归优化等)
- 视频教学资源推荐(中文讲解)
欢迎随时告诉我 😊