函数定义与调用
什么是函数
函数是一段具有特定功能的可重用代码块。通过函数,你可以将复杂的逻辑分解成小的、易于管理的部分,提高代码的可读性和可维护性。
# 定义一个简单的函数
def greet(name):
return f"你好,{name}!"
# 调用函数
message = greet("张三")
print(message) # 输出: 你好,张三!
函数的基本语法
Python函数使用def关键字定义,后面跟着函数名和参数列表。
# 无参数函数
def say_hello():
print("Hello!")
# 有参数函数
def add(a, b):
return a + b
# 多行函数
def calculate_average(numbers):
if not numbers:
return 0
total = sum(numbers)
count = len(numbers)
return total / count
# 调用函数
say_hello()
result = add(3, 5)
avg = calculate_average([1, 2, 3, 4, 5])
参数类型
Python支持多种参数类型,包括位置参数、关键字参数、默认参数和可变参数。
# 位置参数
def power(base, exponent):
return base ** exponent
# 关键字参数
result = power(base=2, exponent=3)
# 默认参数
def greet(name, greeting="你好"):
return f"{greeting},{name}!"
# 可变参数(*args)
def calculate_sum(*numbers):
return sum(numbers)
# 关键字可变参数(**kwargs)
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
# 调用示例
print(greet("李四")) # 使用默认问候语
print(greet("李四", greeting="早上好")) # 自定义问候语
print(calculate_sum(1, 2, 3, 4, 5)) # 输出: 15
print_info(name="王五", age=25, city="北京")
返回值
函数可以通过return语句返回一个或多个值。
# 返回单个值
def square(n):
return n * n
# 返回多个值(实际上是返回元组)
def get_min_max(numbers):
return min(numbers), max(numbers)
# 使用返回值
result = square(5)
minimum, maximum = get_min_max([3, 1, 4, 1, 5, 9, 2, 6])
print(f"平方: {result}") # 输出: 平方: 25
print(f"最小值: {minimum}, 最大值: {maximum}")
作用域
变量的作用域决定了变量在代码中的可见性和生命周期。
# 全局变量
global_var = "我是全局变量"
def outer_function():
# 外部函数的局部变量
outer_var = "我是外部函数的变量"
def inner_function():
# 内部函数可以访问外部函数的变量
inner_var = "我是内部函数的变量"
print(global_var) # 可以访问全局变量
print(outer_var) # 可以访问外部函数的变量
print(inner_var) # 可以访问自己的变量
inner_function()
# print(inner_var) # 错误!无法访问内部函数的变量
outer_function()
闭包
闭包是一种特殊的函数,它记住并访问定义时的环境变量。
def create_multiplier(factor):
def multiplier(number):
return number * factor
return multiplier
# 创建闭包
double = create_multiplier(2)
triple = create_multiplier(3)
# 使用闭包
print(double(5)) # 输出: 10
print(triple(5)) # 输出: 15
# 闭包记住factor的值
print(double(10)) # 输出: 20
print(triple(10)) # 输出: 30
函数作为参数
函数可以作为参数传递给其他函数,这在回调函数和高阶函数中很常见。
def apply_operation(func, a, b):
return func(a, b)
def add(x, y):
return x + y
def multiply(x, y):
return x * y
# 传递函数作为参数
result1 = apply_operation(add, 3, 5)
result2 = apply_operation(multiply, 3, 5)
print(f"加法: {result1}") # 输出: 加法: 8
print(f"乘法: {result2}") # 输出: 乘法: 15
最佳实践
- 函数名应该清晰地描述其功能,使用小写字母和下划线
- 每个函数应该只做一件事,保持函数职责单一
- 避免函数过长,复杂逻辑应该分解成多个小函数
- 使用文档字符串(docstring)为函数添加说明
- 合理使用默认参数,避免可变对象作为默认参数
- 优先使用关键字参数提高代码可读性
函数是Python编程的核心构建块,掌握函数的使用能让你写出更加模块化和可维护的代码。