查看: 1358|回复: 3

Python嵌套列表成绩查询:return与print输出差

[复制链接]
发表于 昨天 15:00 | 显示全部楼层 |阅读模式
在Python里,普通一维列表遍历容易理解,但嵌套列表按姓名查成绩时,函数究竟该return结果还是直接print输出,容易混淆。本文基于一个学生成绩查询示例,说明两种常见写法差异、调用方式和边界处理。示例数据student_score = [[1, 'Lily', 95], [2, 'Bob', 83], [3, 'Tom'], [4, 'Lis', 89]],子列表结构为[编号,姓名,成绩],其中Tom没有第三项,因此访问student[2]时会触发IndexError。

方式一:函数只负责返回数据,print交给调用方
函数get_grade(student_score,name)遍历student_score,如果student[1]等于name,尝试取student[2]作为grade并return grade。若子列表缺少成绩项,捕获IndexError并return '找不到该同学的成绩'。遍历结束仍未匹配,return '找不到该同学的信息'。调用时用a=get_grade(...); print(a)输出。适用于需要复用返回值、测试断言、后续计算的场景。
  1. def get_grade(student_score, name):
  2.     for student in student_score:
  3.         if student[1] == name:
  4.             try:
  5.                 grade = student[2]
  6.                 return grade
  7.             except IndexError:
  8.                 return '找不到该同学的成绩'
  9.     return '找不到该同学的信息'
  10. student_score = [[1, 'Lily', 95], [2, 'Bob', 83], [3, 'Tom'], [4, 'Lis', 89]]
  11. a = get_grade(student_score, 'Tom')
  12. print(a)
  13. b = get_grade(student_score, '234')
  14. print(b)
  15. c = get_grade(student_score, 'Lily')
  16. print(c)
复制代码
对于Tom返回“找不到该同学的成绩”;对于234返回“找不到该同学的信息”;Lily返回95。

方式二:函数内部直接print,再用return结束流程
同样遍历和匹配,命中后取grade,print('{}的成绩是:{}'.format(name, grade)),然后return。若IndexError,print('找不到该同学的成绩')并return。循环外print('找不到该同学的信息')并return。调用时不需要print返回值,直接get_grade(...)。这适合只关心控制台输出的脚本,但不便于获取结果做二次处理。
  1. def get_grade(student_score, name):
  2.     for student in student_score:
  3.         if student[1] == name:
  4.             try:
  5.                 grade = student[2]
  6.                 print('{}的成绩是:{}'.format(name, grade))
  7.                 return
  8.             except IndexError:
  9.                 print('找不到该同学的成绩')
  10.                 return
  11.     print('找不到该同学的信息')
  12.     return
  13. student_score = [[1, 'Lily', 95], [2, 'Bob', 83], [3, 'Tom'], [4, 'Lis', 89]]
  14. get_grade(student_score, 'Bob')
  15. get_grade(student_score, 'Tom')
  16. get_grade(student_score, '234')
复制代码
输出分别为Bob的成绩是83,Tom找不到成绩,234找不到信息。

对比与适用场景
方式一函数返回数据,调用方控制输出,适合模块化、复用和测试;方式二函数耦合打印,调用简单,但返回值不可用,适合临时脚本或一次性查看结果。IndexError的原因是Tom子列表只有两个元素,访问student[2]越界。两种方式都基于Python基础语法,无需额外库。实际写脚本时,如果需要继续处理成绩值,建议采用方式一;如果只是运行后看控制台结果,可以采用方式二。注意两种写法都通过return终止函数流程,避免后续分支继续输出。
回复

使用道具 举报

发表于 昨天 19:00 | 显示全部楼层

Re: Python嵌套列表成绩查询:return与print输出差

楼主这个对比挺实用的。我觉得关键就是职责分离:方式一把查询和显示分开,函数只负责返回结果,调用方想打印、断言、继续计算都行;方式二把输出写死在函数里,跑脚本看结果很方便,但后面想拿成绩做判断就得再改函数。Tom 那个例子也说明边界处理很重要,子列表少一项时访问 student[2] 会越界,用 try/except 捕获 IndexError 比先判断长度更贴合这个数据结构。我自己写这类小查询也会偏向方式一,除非只是临时看一眼。另外方式二里先 print 再 return 的顺序别写反,不然容易只返回不输出。
回复 支持 反对

使用道具 举报

发表于 昨天 19:10 | 显示全部楼层

Re: Python嵌套列表成绩查询:return与print输出差

这个例子很实用,Tom那条只有编号和姓名,正好把缺成绩项的边界情况带出来了。我也更习惯方式一:函数只负责查和返回,print交给调用方,后面想复用成绩做统计、比较或者写测试都方便,不会把输出和逻辑绑死。方式二在临时脚本里确实省事,运行完直接看控制台,但一旦想在别处拿这个成绩,就得再改函数。你最后强调两种写法都用return终止流程也很关键,不然命中后可能还会继续往下输出。整体讲得很清楚,入门时按这个思路区分return和print会少很多困惑。
回复 支持 反对

使用道具 举报

发表于 昨天 19:20 | 显示全部楼层

Re: Python嵌套列表成绩查询:return与print输出差

这个对比挺实用的。方式一和方式二的核心差别确实不只是“谁负责打印”,而是函数要不要把结果交出去。像 Tom 缺成绩、234 查无此人,这两种情况分开提示,比统一报错更清楚,也更容易排查。 我自己写这种查询时也更倾向方式一:函数只返回数据,调用处再决定打印、断言还是继续计算;如果只是临时跑一下看结果,方式二就省事很多。你提到命中后要用 return 终止流程这点也很关键,不然容易继续往下走,出现多余输出。整体例子把嵌套列表、IndexError 和两种调用方式都串起来了,挺适合拿来理解 return 和 print 的区别。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-12 12:30 , Processed in 0.023821 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部