Python3 函数知识点详解
编程小白的函数指南 – 通俗易懂的Python函数核心知识汇总
➊ 什么是函数?
函数就像是一个做特定任务的小机器。你给它一些材料(输入),它就按照设定好的方式工作,然后给你一个成品(输出)。
为什么需要函数?
- 避免重复写相同的代码
- 把复杂问题分解成小任务
- 让代码更容易理解和维护
- 方便多人协作
Python示例:定义和调用函数
def greet(name):
# 这是一个简单的问候函数
return f"你好, {name}!今天过得怎么样?"
# 调用函数
message = greet("小明")
print(message) # 输出: 你好, 小明!今天过得怎么样?
➋ 定义函数
在Python中,使用def关键字来定义函数:
- 函数名:应该有意义,使用小写字母和下划线
- 参数:放在括号里,可以有多个参数
- 冒号:函数定义行以冒号结束
- 函数体:缩进的代码块,包含函数的具体操作
- return语句:返回结果(可选)
函数定义的基本结构
def 函数名(参数1, 参数2=默认值, ...):
"""文档字符串(可选)"""
# 函数体 - 执行任务的代码
代码块
...
return 返回值 # 可选
💡 重要提示
函数定义后不会立即执行,需要调用函数才会执行其中的代码。
➌ 函数参数详解
参数是函数的输入值,Python有几种不同类型的参数:
1. 位置参数:最常见的参数,按照位置顺序传递
2. 默认参数:在定义时给参数指定默认值
3. 关键字参数:通过参数名指定值,不再依赖位置
4. 可变参数:处理不确定数量的参数
- *args:接收任意数量的位置参数
- **kwargs:接收任意数量的关键字参数
各种参数类型示例
# 位置参数
def add_numbers(a, b):
return a + b
# 默认参数
def make_coffee(size='中杯', type='拿铁'):
return f"一杯{size}{type}咖啡"
# 可变参数 (*args 和 **kwargs)
def show_info(name, *hobbies, **details):
print(f"姓名: {name}")
print("爱好:", hobbies)
print("详细信息:", details)
# 调用示例
print(add_numbers(3, 5)) # 位置参数
print(make_coffee(type='美式')) # 关键字参数
show_info("小李", "阅读", "编程", "旅游", age=25, city="北京")
➍ 返回值
函数可以通过return语句返回结果:
- 函数可以返回任意类型的值
- 可以返回多个值(实际上是返回一个元组)
- 没有return语句的函数返回None
- return语句执行后,函数立即结束
返回值示例
def calculate(a, b):
# 返回多个值
return a + b, a - b, a * b, a / b
# 调用函数并接收返回值
sum_result, diff, product, quotient = calculate(10, 2)
print("和:", sum_result) # 12
print("差:", diff) # 8
print("积:", product) # 20
print("商:", quotient) # 5.0
➎ 变量作用域
变量的作用域指的是变量在程序中哪些地方可以被访问:
局部变量:在函数内部定义的变量,只能在函数内部使用
全局变量:在函数外部定义的变量,可以在整个程序中使用
在函数内部修改全局变量需要使用global关键字
变量作用域示例
count = 10 # 全局变量
def update_count():
global count # 声明使用全局变量
count = 20 # 修改全局变量
local_var = 5 # 局部变量
def show_count():
print("当前计数:", count) # 访问全局变量
update_count()
show_count() # 输出: 当前计数: 20
# print(local_var) # 错误! 无法访问局部变量
➏ Lambda函数
Lambda函数是一种简洁的函数创建方式:
- 也称为匿名函数(没有名字的函数)
- 通常用于简单的操作
- 只能包含一个表达式
- 会自动返回表达式的结果
语法:lambda 参数: 表达式
Lambda函数示例
# 普通函数
def square(x):
return x ** 2
# 对应的lambda函数
square_lambda = lambda x: x ** 2
print(square(5)) # 25
print(square_lambda(5)) # 25
# 在排序中使用lambda
students = [
{'name': '小明', 'score': 90},
{'name': '小红', 'score': 78},
{'name': '小刚', 'score': 95}
]
# 按分数从高到低排序
students_sorted = sorted(students, key=lambda s: s['score'], reverse=True)
print(students_sorted)
➐ 递归函数
递归函数是自己调用自己的函数:
关键要素:
- 递归出口:终止递归的条件
- 递归步骤:将问题分解成更小的相似问题
递归适合解决:阶乘、斐波那契数列、遍历树结构等问题
递归函数示例
# 计算阶乘的递归函数
def factorial(n):
if n == 1: # 递归出口
return 1
else:
return n * factorial(n - 1) # 递归调用
print(factorial(5)) # 120 (5*4*3*2*1)
# 斐波那契数列递归实现
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
# 输出前10个斐波那契数
for i in range(10):
print(fibonacci(i), end=" ") # 0 1 1 2 3 5 8 13 21 34
➑ 函数文档
文档字符串(docstring)用于说明函数的功能:
- 放在函数定义的第一行
- 使用三重引号(”’ 或 “””)括起来
- 可以通过help()函数查看
- 良好的文档是高质量代码的重要组成部分
文档字符串示例
def calculate_area(length, width):
"""
计算矩形面积
参数:
length (float): 矩形的长度
width (float): 矩形的宽度
返回:
float: 矩形的面积(长度 * 宽度)
示例:
>>> calculate_area(4, 5)
20
"""
return length * width
# 查看函数的文档字符串
help(calculate_area)
# 或者使用print(calculate_area.__doc__)