Python函数返回列表至main时报NameError: New_List未定义问题求解
报错根因
触发NameError: name "New_List" is not defined的核心是Python的变量作用域规则:New_List是定义在change_list函数内部的局部变量,仅能在change_list的函数块内被访问,外部的main函数完全无法直接读取这个变量。
你当前代码的两处编写问题:
- 虽然
change_list里写了return New_List的返回逻辑,但在main中调用函数时,没有用变量承接这个返回值 - 直接在
main的作用域里引用仅存在于change_list内部的New_List,自然会提示变量未定义
修正方法
按照你最初的需求——让FirstList经过change_list处理后,把得到的结果重新赋值回FirstList,只需要调整对应调用逻辑:
- 把原来的
change_list(FirstList)修改为FirstList = change_list(FirstList),用FirstList承接函数返回的处理结果 - 删除main里错误的
print(New_List)语句,改为打印已经完成重新赋值的FirstList
修正后的可运行代码:
from __future__ import print_function import random def main(): FirstList = [] print("Here is the list of random integers...") for x in range(0,12): FirstList.append(random.randint(50,100)) for x in FirstList: print(x, end=" ") # 原循环内找元素的逻辑可简化,避免重复值带来的判断误差 FourthElm = FirstList[3] NinthElm = FirstList[9] print(f"\nThe 4th Element in the list is {FourthElm}") print(f"The Element at index 9 is {NinthElm}") print(f"The smallest element in the list is {min(FirstList)}") # 承接函数返回值,完成FirstList的重新赋值 FirstList = change_list(FirstList) print(FirstList) def change_list(x): New_List = x[3:9] print(f"The size of the list is now {len(New_List)}") New_List = sorted(New_List) return New_List main()
额外提示:你原本在循环里通过
if x == FirstList[4]定位目标元素的写法有逻辑隐患——如果列表中存在和索引4位置值重复的元素,会错误触发变量赋值,直接通过索引取值的方式稳定性更高。
内容的提问来源于stack exchange,提问作者Jahigs
相关产品推荐
相关产品推荐

