【问题标题】:Python not updating list valuesPython不更新列表值
【发布时间】:2018-11-06 19:24:16
【问题描述】:

在我的 python 文件的顶部,我创建了一个列表:

table = [[]]

然后我有一个设置列表值的方法:

def setTable():
    table = list(csv.reader(open("vplan/temp.csv")))
    print(table)

如果我运行它,table 的值会按原样打印出来。但是,如果我尝试在我的方法之外打印它

print(table)

它只打印“[[]]” - 我不明白为什么。 希望有人能给我解释一下,我不经常使用 Python。

【问题讨论】:

  • 因为您只需将结果分配给setTable 内的table,这是一个局部变量。您可以使用 global 语句,但您应该简单地 return 函数的结果

标签: python list printing


【解决方案1】:

您方法内的表变量与您方法外的表变量不同,为了使用相同的变量,请尝试这样做:

table = [[]]

def setTable(table):
    table = list(csv.reader(open("vplan/temp.csv")))
    return table

print(setTable(table))

我希望这对你有所帮助我做了很多 python 编程,所以我对这门语言非常熟悉。我不确定你在开始时定义表变量时需要像这样分配它:[[]],但如果这是你需要你的代码工作的方式,那么就这样使用它。如果它不能像这样使用它:[[]],那么试试这样:[]。希望对你有帮助,谢谢。

【讨论】:

    【解决方案2】:

    根据 LEGB 范围规则(您可以在此处阅读:https://realpython.com/python-scope-legb-rule/#using-the-legb-rule-for-python-scope),您创建的变量位于 全局范围,而函数内部的变量是 Local范围

    默认情况下,您无法在函数内部访问 全局范围 变量 table(它会创建一个与您可以在函数内访问的名称相同的局部范围变量)。 相反,您必须告诉 python 您正在尝试将其分配给全局变量 table

    所以这是你需要编写的代码:

    table = [[]]
    
    def setTable():
        global table
        table = list(csv.reader(open("vplan/temp.csv")))
        print(table)
    
    print(table)
    

    【讨论】:

      猜你喜欢
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 2018-07-04
      • 2018-07-08
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多