一、函数的返回值:“工具的输出”
用return语句返回函数的执行结果,核心规则:
- 函数执行到
return会立即结束,后续代码不执行; - 无
return的函数,默认返回None; - 可返回多个值(实际是打包成元组,接收时可解包)。
示例 1:基本返回值
def multiply(a, b):
return a * b # 返回乘积
result = multiply(4, 5)
print(result) # 输出:20
示例 2:返回多个值
def calculate(a, b):
sum_ab = a + b
sub_ab = a - b
return sum_ab, sub_ab # 实际返回 (sum_ab, sub_ab)
# 接收方式1:用一个变量接收(元组)
result = calculate(10, 3)
print(result) # 输出:(13, 7)
# 接收方式2:解包成多个变量
sum_result, sub_result = calculate(10, 3)
print(sum_result) # 输出:13
print(sub_result) # 输出:7
二、函数的作用域:“变量的有效范围”
变量的作用域指变量能被访问的范围,分为两类:
- 局部作用域(Local) :函数内部定义的变量,仅在函数内有效,外部无法访问;
- 全局作用域(Global) :函数外部定义的变量,整个程序都能访问(函数内可读取,但默认不能修改)。
示例 1:局部变量 vs 全局变量
# 全局变量
name = "全局张三"
def test_scope():
# 局部变量(仅函数内有效)
name = "局部张三"
print("函数内:", name) # 输出:函数内:局部张三
test_scope()
print("函数外:", name) # 输出:函数外:全局张三
示例 2:修改全局变量(用 global 关键字)
name = "张三"
def modify_global():
global name # 声明使用全局变量name
name = "李四" # 修改全局变量
modify_global()
print(name) # 输出:李四(全局变量被修改)
三、函数进阶特性(新手必知)
1. 匿名函数(lambda)
用lambda定义 “极简函数”,适合临时使用的简单逻辑,语法:lambda 参数: 表达式。
# 普通函数:计算两数之和
def add(a, b):
return a + b
# 匿名函数:等价于上面的add函数
add_lambda = lambda a, b: a + b
print(add_lambda(3, 5)) # 输出:8
# 常用场景:配合内置函数(如sorted)
students = [("张三", 18), ("李四", 17), ("王五", 19)]
# 按年龄排序(用lambda指定排序依据)
sorted_students = sorted(students, key=lambda x: x[1])
print(sorted_students) # 输出:[('李四', 17), ('张三', 18), ('王五', 19)]
2. 递归函数
函数调用自身,需满足两个条件:
- 有递归终止条件(避免无限递归);
- 每次调用都向终止条件靠近。
# 示例:计算n的阶乘(n! = n × (n-1) × ... × 1)
def factorial(n):
# 终止条件:n=1时返回1
if n == 1:
return 1
# 递归调用:n! = n × (n-1)!
return n * factorial(n-1)
print(factorial(5)) # 输出:120(5×4×3×2×1)
总结
- 函数基础:用
def定义,调用时传参,return返回结果(无 return 则返回 None); - 参数核心:必选参数(必填)、默认参数(可选)、
*args(可变位置参数)、**kwargs(可变关键字参数)是核心类型; - 关键规则:局部变量仅函数内有效,修改全局变量需用
global;匿名函数(lambda)适合简单逻辑,递归函数需有终止条件。