知识点概述

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表达式创建匿名函数

下一课预告:

在下一课中,我们将学习列表操作,了解Python中最常用的数据结构。

预览下一课