函数是 Python 编程中的核心概念之一,它封装了可重复使用的代码块,提高了代码的模块化和可维护性。
1. 函数基础
1.1 函数的概念
-
概念:函数是可以重复执行的语句块,用于封装代码逻辑。
-
作用:提高代码的重用性和可读性。
-
定位:函数是面向过程编程的最小单位。
1.2 函数的定义
使用 def
语句定义函数。
def add(a, b):
return a + b
2. 内置函数
Python 提供了许多内置函数,可以直接使用。以下是一些常见的内置函数:
2.1 all()
检查可迭代对象中的所有元素是否为 True
。
print(all([True, True, False])) # 输出: False
2.2 sum()
计算可迭代对象中所有元素的和。
print(sum([1, 2, 3])) # 输出: 6
2.3 sorted()
返回一个排序后的新列表。
print(sorted([3, 1, 2])) # 输出: [1, 2, 3]
2.4 zip()
将多个可迭代对象打包成元组。
names = ["Alice", "Bob"]
ages = [25, 30]
zipped = zip(names, ages)
print(list(zipped)) # 输出: [('Alice', 25), ('Bob', 30)]
2.5 filter()
过滤出符合条件的元素。
numbers = [1, 2, 3, 4, 5]
filtered = filter(lambda x: x % 2 == 0, numbers)
print(list(filtered)) # 输出: [2, 4]
3. 函数的调用
函数通过函数名加括号 ()
来调用。
3.1 基本用法
result = add(3, 5) # 调用函数
print(result) # 输出: 8
3.2 参数传递
函数调用时可以通过多种方式传递参数。
3.2.1 位置传参
def greet(name, age):
print(f"Hello, {name}. You are {age} years old.")
greet("Alice", 30) # 输出: Hello, Alice. You are 30 years old.
3.2.2 关键词传参
greet(age=30, name="Alice") # 输出: Hello, Alice. You are 30 years old.
3.2.3 默认值参数
def greet(name, age=25):
print(f"Hello, {name}. You are {age} years old.")
greet("Alice") # 输出: Hello, Alice. You are 25 years old.
3.2.4 可变参数
def sum_numbers(*args):
return sum(args)
print(sum_numbers(1, 2, 3)) # 输出: 6
3.2.5 关键词参数
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30)
# 输出:
# name: Alice
# age: 30
4. 变量作用域
变量的作用域决定了变量的可见性和生命周期。Python 中的作用域遵循 LEGB 规则(Local, Enclosing, Global, Built-in)。
4.1 局部作用域
def func():
x = 10 # 局部变量
print(x)
func() # 输出: 10
4.2 全局作用域
x = 10 # 全局变量
def func():
global x # 声明使用全局变量
x = 20
func()
print(x) # 输出: 20
4.3 嵌套作用域
def outer():
x = 10 # 外层函数变量
def inner():
nonlocal x # 声明使用外层变量
x = 20
inner()
print(x) # 输出: 20
outer()
5. 递归函数
递归函数是指函数直接或间接调用自身的过程。递归通常用于解决可以分解为相似子问题的问题。
5.1 阶乘
def factorial(n):
if n == 0 or n == 1:
return 1
return n * factorial(n - 1)
print(factorial(5)) # 输出: 120
5.2 斐波那契数列
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(6)) # 输出: 8
6. 匿名函数
匿名函数(lambda
函数)是一种没有名字的函数,通常用于需要一个简短的、临时的函数场景。
6.1 基本语法
lambda arguments: expression
6.2 示例
add = lambda a, b: a + b
print(add(3, 5)) # 输出: 8
6.3 使用场景
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # 输出: [1, 4, 9, 16, 25]
7. 高阶函数
高阶函数是指可以接受函数作为参数或返回函数的函数。
7.1 map()
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # 输出: [1, 4, 9, 16, 25]
7.2 filter()
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 输出: [2, 4]
7.3 reduce()
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 输出: 120
8. 总结
-
函数定义:使用
def
关键字定义函数。 -
参数传递:支持位置传参、关键词传参、默认值参数、可变参数等。
-
作用域:遵循 LEGB 规则,分为局部、嵌套、全局和内建作用域。
-
递归函数:用于解决可以分解为相似子问题的问题。
-
匿名函数:使用
lambda
定义简短的函数。 -
高阶函数:可以接受函数作为参数或返回函数