第2周学习计划:函数与模块
目标:掌握函数定义与调用、模块的使用,以及文件读写基础。
学习内容总览
- 函数:定义、参数、返回值、匿名函数(lambda)。
- 模块:导入标准库、创建自定义模块。
- 文件操作:读写文本文件。
- 实践:优化之前的计算器程序,用函数封装功能。
第一部分:函数
1. 函数基础
- 定义:用
def
关键字创建函数,封装可重用代码。 - 语法:
def 函数名(参数):
# 代码块
return 返回值
- 示例:
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 输出:8
2. 参数与返回值
- 默认参数:给参数设置默认值。
- 多返回值:用逗号分隔多个返回值。
- 示例:
def greet(name, message="你好"):
return f"{message},{name}!", len(name)
greeting, name_len = greet("小明")
print(greeting) # 输出:你好,小明!
print(name_len) # 输出:2
3. 匿名函数(lambda)
- 定义:简洁的单行函数,用
lambda
创建。 - 示例:
double = lambda x: x * 2
print(double(5)) # 输出:10
第二部分:模块
- 定义:模块是一个包含函数、变量等的 Python 文件,可以被其他文件导入。
- 导入方式:
import 模块名
from 模块名 import 函数名
- 示例:
import math
print(math.sqrt(16)) # 输出:4.0
from random import randint
print(randint(1, 10)) # 输出:1-10 之间的随机数
- 自定义模块:
- 创建文件
my_module.py
,写一个函数:
- 创建文件
# my_module.py
def say_hello():
print("Hello from my module!")
- 在另一个文件导入:
import my_module
my_module.say_hello() # 输出:Hello from my module!
第三部分:文件操作
- 基本操作:
- 读取:
open(文件名, 'r')
- 写入:
open(文件名, 'w')
- 追加:
open(文件名, 'a')
- 读取:
- 示例:
# 写入文件
with open("test.txt", "w") as file:
file.write("Hello, Python!\n")
# 读取文件
with open("test.txt", "r") as file:
content = file.read()
print(content) # 输出:Hello, Python!
实践任务:优化计算器程序
目标:
用函数重构之前的计算器程序,添加文件记录功能,每次计算结果保存到文件中。
代码实现
以下是优化后的版本:
def calculate(num1, operator, num2):
"""执行计算并返回结果"""
if operator == '+':
return num1 + num2
elif operator == '-':
return num1 - num2
elif operator == '*':
return num1 * num2
elif operator == '/':
if num2 == 0:
raise ZeroDivisionError("除数不能为零!")
return num1 / num2
else:
raise ValueError("无效的运算符!")
def save_result(num1, operator, num2, result):
"""将计算结果保存到文件"""
with open("calc_history.txt", "a") as file:
file.write(f"{num1} {operator} {num2} = {result}\n")
def main():
valid_operators = ['+', '-', '*', '/']
while True:
try:
num1 = float(input("请输入第一个数字:"))
operator = input("请输入运算符(+、-、*、/):")
if operator not in valid_operators:
print("错误:运算符必须是 +、-、*、/ 之一!")
continue
num2 = float(input("请输入第二个数字:"))
result = calculate(num1, operator, num2)
print(f"{num1} {operator} {num2} = {result}")
save_result(num1, operator, num2, result)
except ValueError as e:
if str(e) == "无效的运算符!":
print(e)
else:
print("错误:请输入有效的数字!")
except ZeroDivisionError as e:
print(f"错误:{e}")
choice = input("是否继续计算?(y/n):")
if choice.lower() != 'y':
print("谢谢使用!")
break
if __name__ == "__main__":
main()
代码讲解
-
函数封装:
calculate()
:处理计算逻辑,返回结果。save_result()
:将结果追加到文件。main()
:主程序循环,调用其他函数。
-
异常处理:
- 在
calculate()
中抛出异常,由main()
捕获。 - 区分
ValueError
(数字输入错误或运算符错误)。
- 在
-
文件操作:
- 用
with open("calc_history.txt", "a")
追加写入,每次计算记录一行。
- 用
动手实践
- 新建文件
calculator_v2.py
,复制代码。 - 运行程序,试试:
- 输入
5 + 3
,结果显示并记录。 - 输入
6 / 0
,提示除零错误。 - 检查
calc_history.txt
,看看记录。
- 输入
- 输入
n
退出。
小挑战
- 读取历史:加个功能,显示
calc_history.txt
中的记录。 - 默认参数:给
calculate()
加默认参数。 - 模块化:把
calculate
和save_result
放入自定义模块。