Python嵌套列表成绩查询:return与print输出差
在Python里,普通一维列表遍历容易理解,但嵌套列表按姓名查成绩时,函数究竟该return结果还是直接print输出,容易混淆。本文基于一个学生成绩查询示例,说明两种常见写法差异、调用方式和边界处理。示例数据student_score = [, , , ],子列表结构为[编号,姓名,成绩],其中Tom没有第三项,因此访问student时会触发IndexError。方式一:函数只负责返回数据,print交给调用方
函数get_grade(student_score,name)遍历student_score,如果student等于name,尝试取student作为grade并return grade。若子列表缺少成绩项,捕获IndexError并return '找不到该同学的成绩'。遍历结束仍未匹配,return '找不到该同学的信息'。调用时用a=get_grade(...); print(a)输出。适用于需要复用返回值、测试断言、后续计算的场景。
def get_grade(student_score, name):
for student in student_score:
if student == name:
try:
grade = student
return grade
except IndexError:
return '找不到该同学的成绩'
return '找不到该同学的信息'
student_score = [, , , ]
a = get_grade(student_score, 'Tom')
print(a)
b = get_grade(student_score, '234')
print(b)
c = get_grade(student_score, 'Lily')
print(c)
对于Tom返回“找不到该同学的成绩”;对于234返回“找不到该同学的信息”;Lily返回95。
方式二:函数内部直接print,再用return结束流程
同样遍历和匹配,命中后取grade,print('{}的成绩是:{}'.format(name, grade)),然后return。若IndexError,print('找不到该同学的成绩')并return。循环外print('找不到该同学的信息')并return。调用时不需要print返回值,直接get_grade(...)。这适合只关心控制台输出的脚本,但不便于获取结果做二次处理。
def get_grade(student_score, name):
for student in student_score:
if student == name:
try:
grade = student
print('{}的成绩是:{}'.format(name, grade))
return
except IndexError:
print('找不到该同学的成绩')
return
print('找不到该同学的信息')
return
student_score = [, , , ]
get_grade(student_score, 'Bob')
get_grade(student_score, 'Tom')
get_grade(student_score, '234')
输出分别为Bob的成绩是83,Tom找不到成绩,234找不到信息。
对比与适用场景
方式一函数返回数据,调用方控制输出,适合模块化、复用和测试;方式二函数耦合打印,调用简单,但返回值不可用,适合临时脚本或一次性查看结果。IndexError的原因是Tom子列表只有两个元素,访问student越界。两种方式都基于Python基础语法,无需额外库。实际写脚本时,如果需要继续处理成绩值,建议采用方式一;如果只是运行后看控制台结果,可以采用方式二。注意两种写法都通过return终止函数流程,避免后续分支继续输出。
Re: Python嵌套列表成绩查询:return与print输出差
楼主这个对比挺实用的。我觉得关键就是职责分离:方式一把查询和显示分开,函数只负责返回结果,调用方想打印、断言、继续计算都行;方式二把输出写死在函数里,跑脚本看结果很方便,但后面想拿成绩做判断就得再改函数。Tom 那个例子也说明边界处理很重要,子列表少一项时访问 student 会越界,用 try/except 捕获 IndexError 比先判断长度更贴合这个数据结构。我自己写这类小查询也会偏向方式一,除非只是临时看一眼。另外方式二里先 print 再 return 的顺序别写反,不然容易只返回不输出。Re: Python嵌套列表成绩查询:return与print输出差
这个例子很实用,Tom那条只有编号和姓名,正好把缺成绩项的边界情况带出来了。我也更习惯方式一:函数只负责查和返回,print交给调用方,后面想复用成绩做统计、比较或者写测试都方便,不会把输出和逻辑绑死。方式二在临时脚本里确实省事,运行完直接看控制台,但一旦想在别处拿这个成绩,就得再改函数。你最后强调两种写法都用return终止流程也很关键,不然命中后可能还会继续往下输出。整体讲得很清楚,入门时按这个思路区分return和print会少很多困惑。Re: Python嵌套列表成绩查询:return与print输出差
这个对比挺实用的。方式一和方式二的核心差别确实不只是“谁负责打印”,而是函数要不要把结果交出去。像 Tom 缺成绩、234 查无此人,这两种情况分开提示,比统一报错更清楚,也更容易排查。 我自己写这种查询时也更倾向方式一:函数只返回数据,调用处再决定打印、断言还是继续计算;如果只是临时跑一下看结果,方式二就省事很多。你提到命中后要用 return 终止流程这点也很关键,不然容易继续往下走,出现多余输出。整体例子把嵌套列表、IndexError 和两种调用方式都串起来了,挺适合拿来理解 return 和 print 的区别。
页:
[1]