Python如何在函数内部更新外部定义的列表
问题根因
- 未主动执行
updatelist()函数:函数定义后如果没有手动调用,内部逻辑不会运行,三个列表始终保持初始的空值状态 - 同名局部变量覆盖问题:就算调用了函数,当前写法中函数内部的
list1 = ['one','two','three']会创建和全局变量同名的局部变量,修改仅在函数内部生效,不会更新外部的全局列表
可行解决方案
方案1:使用global关键字声明全局变量(适合需要直接修改全局变量的场景)
在函数内部用global声明要操作的变量属于全局作用域,赋值时就会直接修改全局变量:
import pandas as pd list1=[] list2=[] list3=[] def updatelist(): global list1, list2, list3 list1=['one','two','three'] list2=['1','2','3'] list3=['4','5','6'] # 调用函数执行更新逻辑 updatelist() df1=pd.DataFrame(list1) df2=pd.DataFrame(list2) df3=pd.DataFrame(list3)
方案2:修改列表对象本身(无需global,适合可变对象修改场景)
列表是可变对象,通过切片赋值list[:] = 新值的方式可以直接修改列表本身的内容,不需要重新绑定变量,也就不需要声明global:
import pandas as pd list1=[] list2=[] list3=[] def updatelist(): list1[:] = ['one','two','three'] list2[:] = ['1','2','3'] list3[:] = ['4','5','6'] updatelist() df1=pd.DataFrame(list1) df2=pd.DataFrame(list2) df3=pd.DataFrame(list3)
方案3:函数返回新列表赋值(更推荐的最佳实践)
避免使用全局变量,直接把计算得到的新列表作为返回值传出,赋值给外部变量,代码逻辑更清晰,没有隐式的全局状态修改:
import pandas as pd def updatelist(): list1=['one','two','three'] list2=['1','2','3'] list3=['4','5','6'] return list1, list2, list3 # 接收函数返回的三个列表 list1, list2, list3 = updatelist() df1=pd.DataFrame(list1) df2=pd.DataFrame(list2) df3=pd.DataFrame(list3)
内容的提问来源于stack exchange,提问作者Rajalakshmi
相关产品推荐
相关产品推荐

