Day 011 完成清单 ✅
函数基础
📖 已学内容
函数定义与调用
- [ ] 理解函数的三大作用:抽象、复用、组合
- [ ] 掌握
def关键字定义函数的基本语法 - [ ] 区分函数(有返回值)和过程(无返回值,隐式返回 None)
- [ ] 掌握函数调用的执行流程:创建栈帧 → 绑定参数 → 执行体 → 销毁栈帧
- [ ] 理解 Python 中函数是"一等公民":可赋值、可传参、可返回
参数传递机制
- [ ] 理解 Python 是"传对象引用"(pass-by-object-reference)
- [ ] 区分不可变类型参数(int, str, tuple)的"值传递错觉"
- [ ] 区分可变类型参数(list, dict)的"引用传递"行为
- [ ] 区分"重新绑定"和"修改对象"两种操作
- [ ] 掌握如何用
.copy()或[:]避免意外修改外部数据
返回值与 None
- [ ] 掌握
return的两个作用:返回值 + 结束函数 - [ ] 掌握返回多个值(实际返回元组)和解包
- [ ] 理解没有 return 时函数隐式返回 None
- [ ] 掌握用
is None而不是== None检查空值 - [ ] 理解 None 是单例(Singleton)
文档字符串(docstring)
- [ ] 理解文档字符串的作用:描述功能、参数、返回值
- [ ] 掌握 Google 风格的文档字符串格式
- [ ] 掌握
help()和__doc__访问文档 - [ ] 区分单行和多行文档字符串的适用场景
实战:计算器函数库
- [ ] 理解如何用函数组织代码(基本运算 → 高级运算 → 统计运算)
- [ ] 掌握防御性编程(除零检查、空列表检查)
- [ ] 理解牛顿迭代法求平方根的算法原理
- [ ] 掌握交互式输入循环的 while True + break 模式
- [ ] 理解
if __name__ == "__main__"的用途
✏️ 练习题
练习 1: 温度转换器
要求:
- 编写三个函数:c_to_f(c)、f_to_c(f)、c_to_k(c)
- 再写一个通用函数 convert_temp(value, from_unit, to_unit)
- 用户输入 25 C to F,程序输出 25.0°C = 77.0°F
提示: 先统一转为摄氏度,再转为目标单位。
示例运行:
请输入: 100 C to F
100.0°C = 212.0°F
请输入: 32 F to C
32.0°F = 0.0°C
请输入: 0 K to C
0.0K = -273.15°C
练习 2: 字符串处理函数库
要求: - 编写以下字符串处理函数:
| 函数 | 功能 | 示例 |
|---|---|---|
reverse(s) |
反转字符串 | reverse("hello") → "olleh" |
count_vowels(s) |
统计元音字母数 | count_vowels("hello") → 2 |
is_palindrome(s) |
判断回文字符串 | is_palindrome("racecar") → True |
capitalize_words(s) |
每个单词首字母大写 | capitalize_words("hello world") → "Hello World" |
word_count(s) |
统计单词数 | word_count("hello world python") → 3 |
注意: 不要使用内置的 [::-1]、str.count() 等方法,自己用循环实现逻辑。
练习 3: 简单计算器(支持中缀表达式)
要求:
- 用户输入形如 3 + 5 * 2 的表达式
- 程序解析并计算结果(注意运算优先级:先乘除,后加减)
- 支持 + - * / 四种运算
- 提示:先将表达式拆分为 tokens,然后处理优先级
示例运行:
请输入表达式: 3 + 5 * 2
结果: 13 (不是 16!因为有运算符优先级)
请输入表达式: (10 - 3) * 2 + 4 / 2
结果: 16
挑战模式: 支持括号 () 改变运算优先级。
练习 4: 猜数字游戏(用函数重构)
要求: 把之前在 Day 010 写的猜数字游戏重构成函数版本:
python
def generate_target(min_val=1, max_val=100):
"""生成随机目标数字。"""
pass
def get_user_guess():
"""获取用户输入并验证。"""
pass
def check_guess(guess, target):
"""比较猜测,返回提示信息。"""
pass
def play_game(min_val=1, max_val=100, max_attempts=10):
"""游戏主逻辑。"""
pass
if __name__ == "__main__":
play_game()
练习 5: 函数分析器
要求:
编写一个函数 analyze_function(func, test_inputs),它能:
- 接收一个函数和一组测试输入
- 对每个输入调用函数
- 返回一个包含以下信息的字典:
-
function_name: 函数名 -docstring: 文档字符串 -results: 输入 → 输出 的映射 -total_time: 总执行时间(用time.time()测量)
示例:
python
def square(x):
"""返回 x 的平方。"""
return x * x
analysis = analyze_function(square, [1, 2, 3, 4, 5])
print(analysis)
# {
# 'function_name': 'square',
# 'docstring': '返回 x 的平方。',
# 'results': {1: 1, 2: 4, 3: 9, 4: 16, 5: 25},
# 'total_time': 0.000123 # 示例值
# }
📝 额外挑战
- [ ] 用
map()和自定义函数实现列表元素平方 - [ ] 实现一个函数装饰器(了解概念即可)
- [ ] 把你的计算器函数库导出为模块(
calculator.py) - [ ] 用
timeit模块测量不同实现的性能差异
📓 学习笔记
```