5.python中的函数
1. 什么是函数?
函数(Function)是一段可重复使用的代码块,用于执行特定任务。在Python中,函数通过def关键字定义。它有以下优点:
- 代码重用:避免重复写相同代码。
- 模块化:将复杂程序分解成小部分。
- 易维护:修改一处即可影响整个程序。
例如,定义一个简单函数计算两个数的和:
def add(a, b):
"""计算a和b的和"""
result = a + b
return result
# 调用函数
sum_result = add(3, 5)
print(sum_result) # 输出:8
这里,add是函数名,a和b是参数,return result返回结果。
2. 如何定义和调用函数?
定义函数的基本语法:
def function_name(parameters):
"""文档字符串(可选)"""
# 函数体
return value # 可选返回值
- 函数名:应描述功能,如
calculate_sum。 - 参数:在括号中列出,可以没有或有多个。
- 文档字符串:用三引号写说明,由于python是动态类型,所以可以在这里说明各个参数的类型或是函数的作用,使用help(参数名)来查看
- 函数体:执行操作的代码。
- 返回值:用
return语句返回结果;如果省略,函数返回None。
调用函数时,直接使用函数名加参数:
# 定义函数
def greet(name):
return f"你好,{name}!"
# 调用函数
message = greet("张三")
print(message) # 输出:你好,张三!
3. 函数参数详解
参数是函数的输入,Python支持多种参数类型,使函数更灵活。
-
位置参数(Positional Arguments):参数按顺序传递。
def multiply(x, y): return x * y result = multiply(2, 3) # x=2, y=3 print(result) # 输出:6 -
默认参数(Default Arguments):参数有默认值,调用时可省略。
def power(base, exponent=2): # exponent默认值为2 return base ** exponent print(power(3)) # 输出:9(3^2) print(power(3, 3)) # 输出:27(3^3) -
关键字参数(Keyword Arguments):按参数名传递,顺序无关。
def divide(dividend, divisor): return dividend / divisor # 使用关键字参数 result = divide(divisor=4, dividend=8) # 顺序颠倒但正确 print(result) # 输出:2.0 -
可变参数(Variable Arguments):处理不定数量参数。需要注意在可变参数后面的就一定是关键字参数而不是位置参数,否则会报错(因为不知道可变参数有多少)
*args:接收任意数量的位置参数,作为元组。def sum_all(*args): total = 0 for num in args: total += num return total print(sum_all(1, 2, 3)) # 输出:6 print(sum_all(5, 10)) # 输出:15**kwargs:接收任意数量的关键字参数,作为字典。def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") print_info(name="李四", age=25) # 输出: # name: 李四 # age: 25
4. 函数返回值
函数通过return语句返回值。如果没有return,函数返回None。返回值可以是任何类型:数字、字符串、列表、甚至另一个函数。
def get_even_numbers(limit):
"""返回小于limit的偶数列表"""
evens = []
for i in range(limit):
if i % 2 == 0:
evens.append(i)
return evens
numbers = get_even_numbers(10)
print(numbers) # 输出:[0, 2, 4, 6, 8]
函数可以返回多个值,以元组形式:
def min_max(numbers):
min_val = min(numbers)
max_val = max(numbers)
return min_val, max_val # 返回元组
values = [4, 2, 9, 5]
min_num, max_num = min_max(values)
print(f"最小值:{min_num}, 最大值:{max_num}") # 输出:最小值:2, 最大值:9
5. 变量的作用域
作用域(Scope)指变量的可访问范围。Python有局部作用域和全局作用域:
- 局部变量(Local Variables):在函数内定义,只在该函数内有效。
- 全局变量(Global Variables):在函数外定义,可在整个程序访问。
示例:
global_var = "我是全局变量"
def test_scope():
local_var = "我是局部变量"
print(global_var) # 可访问全局变量
print(local_var) # 可访问局部变量
test_scope()
# print(local_var) # 错误:local_var未定义(外部无法访问局部变量)
在函数内修改全局变量需用global关键字(注意要在使用这个变量之前用global声明,不然会报错):
count = 0
def increment():
global count # 声明使用全局变量,如果没有,就默认是一个新的局部变量
count += 1
increment()
print(count) # 输出:1
6. 匿名函数:lambda
Lambda函数是匿名、单行的小函数,用lambda关键字定义。语法:lambda arguments: expression。它常用于简单操作。
arguments是输入参数,一个或者多个,expression为返回值,只能是单个表达式,不能有return语句
# 定义lambda函数:计算平方
square = lambda x: x ** 2
print(square(4)) # 输出:16
# 在map函数中使用lambda
numbers = [1, 2, 3]
squared_list = list(map(lambda x: x * x, numbers))
print(squared_list) # 输出:[1, 4, 9]
Lambda函数适合短小任务,但不适合复杂逻辑。
7. 递归函数
递归函数(Recursive Function)调用自身来解决问题。它需有基线条件(终止条件)和递归步骤。例如,计算阶乘:
n
!
=
n
×
(
n
−
1
)
!
其中
0
!
=
1
n! = n \times (n-1)! \quad \text{其中} \quad 0! = 1
n!=n×(n−1)!其中0!=1
def factorial(n):
if n == 0: # 基线条件
return 1
else: # 递归步骤
return n * factorial(n - 1)
print(factorial(5)) # 输出:120
递归需谨慎,避免无限递归(如忘记基线条件),否则导致栈溢出。
8. 高阶函数
高阶函数(Higher-order Function)能接受函数作为参数或返回函数。Python内置高阶函数包括map、filter和reduce(在functools模块)。
-
map函数:应用函数到序列每个元素。
# 使用map将列表元素加倍 def double(x): return x * 2 nums = [1, 2, 3] doubled = list(map(double, nums)) print(doubled) # 输出:[2, 4, 6] -
filter函数:过滤序列,保留满足条件的元素。
# 使用filter筛选偶数 def is_even(x): return x % 2 == 0 numbers = [1, 2, 3, 4, 5] evens = list(filter(is_even, numbers)) print(evens) # 输出:[2, 4] -
reduce函数:累积序列元素(需导入)。
from functools import reduce # 使用reduce计算乘积 def multiply(a, b): return a * b product = reduce(multiply, [1, 2, 3, 4]) print(product) # 输出:24
9. 函数最佳实践
写好函数能提升代码质量:
- 命名清晰:函数名描述功能,如
calculate_average。 - 单一职责:一个函数只做一件事。
- 文档字符串:用三引号写说明,便于他人理解。
- 参数检查:验证输入,避免错误。
- 错误处理:用
try-except捕获异常。def safe_divide(a, b): try: return a / b except ZeroDivisionError: return "除数不能为零" print(safe_divide(10, 0)) # 输出:除数不能为零
10. 总结
函数是Python编程的基石。通过本文,你学会了如何定义和调用函数、处理参数、管理作用域、使用lambda和递归、以及高阶函数应用。记住,函数设计应以简洁和可重用为目标。多练习写函数,能显著提高代码效率和可读性。现在,动手试试吧!例如,写一个函数计算斐波那契数列:
F
(
n
)
=
F
(
n
−
1
)
+
F
(
n
−
2
)
其中
F
(
0
)
=
0
,
F
(
1
)
=
1
F(n) = F(n-1) + F(n-2) \quad \text{其中} \quad F(0)=0, F(1)=1
F(n)=F(n−1)+F(n−2)其中F(0)=0,F(1)=1
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
更多推荐



所有评论(0)