知识点概述
def, 参数, 返回值
学习如何封装代码为可重用的函数,这是编写模块化、可维护程序的关键。
详细讲解
函数定义
函数是一段可重复使用的代码块,可以接受输入参数并返回结果。
定义函数:
使用 def 关键字定义函数:
- 基本语法:
def 函数名(参数): - 函数体需要缩进
- 可以使用文档字符串(docstring)描述函数功能
- 函数名应该有意义,通常使用小写字母和下划线
函数参数:
函数可以接受参数,使函数更加灵活:
- 必需参数:调用时必须提供的参数
- 默认参数:为参数提供默认值,调用时可省略
- 关键字参数:调用时指定参数名,可不按顺序
- 可变参数:使用
*args接收任意数量的位置参数 - 关键字可变参数:使用
**kwargs接收任意数量的关键字参数
返回值:
函数可以使用 return 语句返回值:
- 可以返回一个值:
return result - 可以返回多个值:
return a, b, c(实际上是返回一个元组) - 如果没有return语句,函数返回
None - return语句执行后,函数立即结束
作用域:
- 局部变量:在函数内部定义的变量,只能在函数内部访问
- 全局变量:在函数外部定义的变量,可以在整个模块中访问
- 使用
global关键字可以在函数内部修改全局变量 - 使用
nonlocal关键字可以修改嵌套函数中的变量
lambda表达式:
lambda表达式用于创建匿名函数(没有名字的函数):
- 语法:
lambda 参数: 表达式 - 只能包含一个表达式,不能包含语句
- 常用于简单的操作或作为其他函数的参数
- 示例:
add = lambda x, y: x + y
代码示例
functions.py
# 函数定义示例
# 定义简单的函数
def greet():
"""这是一个简单的问候函数"""
print("你好!欢迎学习Python函数。")
# 调用函数
greet()
# 带参数的函数
def greet_person(name):
"""向指定的人问候"""
print(f"你好,{name}!")
greet_person("小明")
greet_person("小红")
# 带返回值的函数
def add_numbers(a, b):
"""返回两个数的和"""
return a + b
result = add_numbers(5, 3)
print(f"5 + 3 = {result}")
# 带默认参数的函数
def power(base, exponent=2):
"""计算幂,默认指数为2(平方)"""
return base ** exponent
print(f"3的平方: {power(3)}")
print(f"2的3次方: {power(2, 3)}")
# 关键字参数
def create_person(name, age, city):
"""创建人员信息"""
return f"姓名: {name}, 年龄: {age}, 城市: {city}"
# 使用关键字参数,可以不按顺序
person1 = create_person(age=20, city="北京", name="张三")
print(person1)
# 可变数量参数
def calculate_average(*numbers):
"""计算任意数量数字的平均值"""
if len(numbers) == 0:
return 0
return sum(numbers) / len(numbers)
avg1 = calculate_average(1, 2, 3, 4, 5)
avg2 = calculate_average(10, 20, 30)
print(f"平均值1: {avg1}")
print(f"平均值2: {avg2}")
# 返回多个值
def get_min_max(numbers):
"""返回列表中的最小值和最大值"""
if not numbers:
return None, None
return min(numbers), max(numbers)
scores = [85, 92, 78, 90, 88]
lowest, highest = get_min_max(scores)
print(f"最低分: {lowest}, 最高分: {highest}")
# 函数嵌套
def outer_function(x):
"""外层函数"""
def inner_function(y):
"""内层函数"""
return y * 2
return inner_function(x) + 10
result = outer_function(5)
print(f"函数嵌套结果: {result}")
# lambda表达式(匿名函数)
square = lambda x: x ** 2
print(f"5的平方(lambda): {square(5)}")
# 使用lambda进行排序
students = [
{"name": "小明", "score": 85},
{"name": "小红", "score": 92},
{"name": "小刚", "score": 78}
]
# 按成绩排序
students_sorted = sorted(students, key=lambda s: s["score"], reverse=True)
print("\n按成绩排序:")
for student in students_sorted:
print(f" {student['name']}: {student['score']}")
输出结果:
你好!欢迎学习Python函数。 你好,小明! 你好,小红! 5 + 3 = 8 3的平方: 9 2的3次方: 8 姓名: 张三, 年龄: 20, 城市: 北京 平均值1: 3.0 平均值2: 20.0 最低分: 78, 最高分: 92 函数嵌套结果: 20 5的平方(lambda): 25 按成绩排序: 小红: 92 小明: 85 小刚: 78
学习提示
1
函数应该只做一件事,并做好这件事(单一职责原则)。
2
使用有意义的函数名和参数名。
3
为函数添加文档字符串,说明函数的功能和参数。
4
避免使用全局变量,优先使用参数和返回值。
练习题
练习 1
中等
编写一个函数,计算圆的面积(半径作为参数)。
圆面积公式:π × r²,可以使用math.pi获取π值。
练习 2
中等
编写一个函数,判断一个数是否为素数。
素数是大于1且只能被1和自身整除的数。
练习 3
困难
编写一个函数,统计字符串中每个字符出现的次数。
使用字典统计字符出现次数,遍历字符串中的每个字符。
练习 4
困难
编写一个函数,将摄氏度转换为华氏度和开尔文温度。
华氏度 = 摄氏度 × 9/5 + 32,开尔文 = 摄氏度 + 273.15
知识点总结
本课要点:
- 掌握使用def关键字定义函数
- 理解不同类型参数的用法
- 熟练使用return语句返回值
- 了解lambda表达式创建匿名函数