python--函数(2)

29 阅读3分钟

一、函数的返回值:“工具的输出”

return语句返回函数的执行结果,核心规则:

  1. 函数执行到return会立即结束,后续代码不执行;
  2. return的函数,默认返回None
  3. 可返回多个值(实际是打包成元组,接收时可解包)。

示例 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

二、函数的作用域:“变量的有效范围”

变量的作用域指变量能被访问的范围,分为两类:

  1. 局部作用域(Local) :函数内部定义的变量,仅在函数内有效,外部无法访问;
  2. 全局作用域(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)

总结

  1. 函数基础:用def定义,调用时传参,return返回结果(无 return 则返回 None);
  2. 参数核心:必选参数(必填)、默认参数(可选)、*args(可变位置参数)、**kwargs(可变关键字参数)是核心类型;
  3. 关键规则:局部变量仅函数内有效,修改全局变量需用global;匿名函数(lambda)适合简单逻辑,递归函数需有终止条件。