如何将年份API查询代码封装为符合要求的Python函数?
问题解决:封装年份事实API函数并返回字典
你的代码存在几个关键问题,导致无法实现预期功能:
- 函数参数设计错误:
query函数接收的是请求对象参数,但实际需要传入的是起始/结束年份 - 依赖全局变量:函数内部直接使用全局的
FY和LY,既破坏封装性,还可能因变量修改引发逻辑错误 - 未按要求存储结果:没有创建字典来保存年份与对应事实的映射,反而返回无关的年份数值
- 外部打印未定义变量:最后
print(url_1, url_n)中的变量在全局作用域不存在,实际运行会报错,你看到的<Response [200]>是之前测试的残留结果
修正后的完整代码
import requests def get_year_facts(start_year, end_year): # 初始化用于存储结果的字典 year_facts = {} # 遍历起始年到结束年的所有年份(包含两端) for year in range(start_year, end_year + 1): # 构造API请求地址 api_url = f'http://numbersapi.com/{year}/year' # 发送请求并获取响应文本 response = requests.get(api_url) # 将年份作为键,事实内容作为值存入字典 year_facts[year] = response.text # 返回最终的年份事实字典 return year_facts # 测试函数 FY = 2015 LY = 2022 year_result = get_year_facts(FY, LY) # 可选:打印结果查看 for year, fact in year_result.items(): print(f"{year}: {fact}")
代码改进说明
- 函数参数改为
start_year和end_year,语义清晰,符合函数封装规范 - 使用
range循环遍历年份,比while循环更简洁易维护 - 明确创建字典存储结果,严格遵循任务要求返回键值对结构
- 函数仅负责获取并返回数据,打印逻辑放在外部,分离职责更合理
内容的提问来源于stack exchange,提问作者Uri
相关产品推荐
相关产品推荐

