Python函数返回追加列表与变量y时出现'name y is not defined'报错的技术咨询
问题分析与修复方案
我来帮你一步步排查代码里的问题,解决报错和列表无法正常返回的问题:
关键错误点拆解
list.append()的返回值误区append()方法是原地修改列表,它的返回值是None,所以你写的final_list_y = y_list.append(y)其实是把None赋值给了final_list_y,完全没必要额外定义这两个变量,直接操作原列表y_list和x_list就好。局部变量无法外部访问
函数内部的y是局部变量,只有函数执行时存在,外部代码根本访问不到它,而且你写的print y是Python2的写法,Python3里必须加括号,这两个问题叠加就触发了name 'y' is not defined的错误。函数返回值未接收
你调用了test_1(60, 5),但没有把函数返回的y_list, x_list, y赋值给外部变量,导致外部的列表还是初始的空状态(哪怕全局列表被函数修改,这种写法也很不规范)。拼写错误
打印时写了print (fina_list_y),少了一个字母l,正确应该是final_list_y(不过其实这个变量我们可以直接去掉)。
修正后的代码方案
推荐使用接收函数返回值的方式(避免全局变量带来的混乱),代码如下:
def test_1(angle, c): y_list = [] x_list = [] last_y = None # 专门保存最后一次循环的y值 for i in range(0, angle, 1): y = (i * 3)**c y_list.append(y) x_list.append(i) last_y = y # 每次循环更新最后一个y值 return y_list, x_list, last_y # 接收函数返回的三个结果 final_list_y, final_list_x, y = test_1(60, 5) # 按要求打印结果(Python3必须用带括号的print()函数) print(final_list_y) print(final_list_x) print(y)
代码修改说明
- 把列表
y_list和x_list移到函数内部,避免全局变量的副作用,代码更模块化 - 新增
last_y变量专门保存循环最后一次的y值,确保能正确返回并被外部访问 - 调用函数时用变量接收返回的三个值,这样外部就能正常获取处理后的列表和最后一个y值
- 修正了打印语句的拼写和Python3的语法问题
这样运行后就能正常输出完成追加操作的列表,以及最后一个y的值啦。
内容的提问来源于stack exchange,提问作者Zard Avatar
相关产品推荐
相关产品推荐

