Python 函数2 · 核心笔记
函数是什么
给一段代码起名字,独立调用、重复使用。让编写、阅读、升级都更容易。
我们已经用过很多内置函数:
- random.randint(0, 100) 生成随机数
- print("hello") 打印输出
- "xiaoming 87".split() 拆分字符串
- input("请输入:") 接收输入
- len(list) 求长度
定义 & 调用
def print_hello():
""" 这是一个函数的定义,用于打印一段文字 """
print("hello world")
# 调用函数(不要忘了括号)
print_hello()
print_hello()
- def 关键字
- 函数名 + () + :
- 文档字符串注释 (docstring)
- 通过名字 + 括号重复调用
参数传递
单个参数
def introduce(name):
print(f"大家好,我的名字是:{name}")
introduce("小明")
introduce("小白")
多个参数 & 位置实参
def introduce(name, gender):
print(f"大家好,我的名字是:{name},是个小{gender}")
introduce("小明", "男生") # 顺序必须一致
关键字实参 (key=value)
introduce(name="小明", gender="男生")
introduce(gender="男生", name="小明") # 顺序可换
默认值参数
def introduce(name, gender, age=6):
print(f"大家好,我是{name},小{gender},今年{age}岁")
introduce("小明", "男生") # age 使用默认 6
introduce("小白", "女生", 5) # 覆盖默认值
多种调用方式:
introduce("小明") 、introduce(name="小明") 、introduce("小白", 5) 、introduce(age=5, name="小白")
返回值 return
用 return 返回结果,函数调用会变成返回值。
def add(x, y):
return int(x) + int(y)
result = add(3, 5)
print(result) # 8
print(add("4", "6")) # 10
返回字典 / 多个值
students = { "xiaoming": {"id": 101, "age": 18} }
def get_student(name):
if name in students:
return students[name]["age"], students[name]["id"]
return None, None
age, id = get_student("xiaoming")
print(age, id) # 18 101
函数返回练习题
练习要求: 编写 compute 函数支持加减乘除,再封装 add 和 sub 函数调用它。
完整代码实现
def compute(x, y, method):
if method == "add":
return x + y
elif method == "sub":
return x - y
elif method == "mul":
return x * y
elif method == "div":
return x / y
else:
return "❌ 未知的运算方式"
def add(x, y):
return compute(x, y, "add")
def sub(x, y):
return compute(x, y, "sub")
def mul(x, y):
return compute(x, y, "mul")
def div(x, y):
return compute(x, y, "div")
print("=" * 30)
print("函数返回练习题测试")
print("=" * 30)
print(f"add(3, 5) = {add(3, 5)}") # 8
print(f"add(10, 20) = {add(10, 20)}") # 30
print("=" * 30)
模块 (module)
将函数存储在 .py 文件中,通过 import 使用。
import compute # compute.add
import compute as cp # cp.add
from compute import add, sub # 直接使用 add/sub
from compute import * # 所有函数
函数模块练习题 · 学生查询
模块拆分练习: 将学生数据与查询逻辑封装在模块中,并在主程序中循环调用。
文件 1:student_query.py
存放学生字典,提供 get(name) 查询函数。
students = {
"xiaoming": {"id": 101, "age": 18, "gender": "boy"},
"xiaohuang": {"id": 102, "age": 19, "gender": "girl"},
"xiaowang": {"id": 103, "age": 17, "gender": "girl"},
}
def get(name):
"""根据姓名返回学生信息字典,不存在则返回 None"""
return students.get(name)
文件 2:school.py (主程序)
导入 student_query 模块,循环接收输入并查询。
import student_query
while True:
print("#" * 20)
name = input("请输入学生姓名 (输入 quit 退出):")
if name == "quit":
break
info = student_query.get(name)
if info:
print("✅ 查到了,信息是:", info)
else:
print("❌ 没有这个学生的信息")
运行效果:
- 输入 xiaoming → 输出 {'id': 101, 'age': 18, 'gender': 'boy'}
- 输入 lilei → 输出 ❌ 没有这个学生的信息
- 输入 quit → 退出循环
lambda 匿名函数
一句话函数,用于简单逻辑,常作为 key 参数传入排序。
sum = lambda x, y: x + y
print(sum(2, 3)) # 5
sgrades = [("xiaoming", 89), ("xiaozhao", 77), ("xiaoxiaozhang", 99)]
sgrades.sort(key=lambda x: x[1])
print(sgrades) # 按成绩升序
print(sorted(sgrades, key=lambda m: m[1], reverse=True)) # 按成绩降序