【问题标题】:How do I append to a global list inside of a function?如何附加到函数内部的全局列表?
【发布时间】:2021-10-26 23:13:40
【问题描述】:

我有一个程序,我希望重复扩展,并且不想每次添加新段时都必须处理相同的代码。唯一的问题是我需要的一个函数涉及附加一个在函数外部定义的列表。我尝试使用 globals() 但出现语法错误。

我需要但由于函数和局部变量的性质而无法工作的示例如下:

fruitList = []
miscList = []

newListObject = input("Enter a new object")

def listAppend(object = newListObject, fruit = fruitList):
     if object in fruit:
          fruitList.append(object)
     else:
          miscList.append(object)

listAppend()

这不起作用,因为 miscList 和fruitList 是全局的,函数只能访问和修改局部变量。有什么解决方法吗?

【问题讨论】:

  • 这不是修改全局变量,而是修改全局变量指向的对象。
  • 另外,最好不要命名 object,因为这是内置 Python 类型的名称,它是一切的基础。
  • 绝对有效。但由于antoher原因它失败了。请始终包含完整的错误消息。
  • @juanpa.arrivillaga 是正确的 - 除非您在另一个上下文中有此代码,否则这是有效的。这可以通过在调用listAppend 后打印列表来证明。
  • 欢迎来到 Stack Overflow。您对全局变量的说法不正确,我无法重现该问题。当我尝试你的代码时,我正确地看到我输入的字符串被附加到miscList。至于为什么您使用globals()“遇到语法错误”,我们只能在您显示您尝试过的代码时解释这一点。它也绝对与“使用globals()”无关 - 即使您遇到与使用相关的问题,它也不会显示为 syntax 错误,因为 syntax 错误是代码缩进错误、括号不匹配等导致的结果。

标签: python list function


【解决方案1】:

它当然适合我!请注意,不建议将全局列表作为函数参数传递,但是如果您有特殊需要,没有什么可以阻止您这样做。我正在测试的示例如下。

fruitList = ['test']
miscList = []


def listAppend(obj=None, fruit=fruitList, misc=miscList):
    if obj is None:
        obj = input("Enter a new object")

    if obj in fruit:
        fruit.append(obj)
    else:
        misc.append(obj)


listAppend('lol')
listAppend('test')

print(fruitList)
print(miscList)

输出:

['test', 'test']
['lol']

注意:我已将参数 object 重命名为 obj,因为覆盖内置类型通常不是一个好主意。

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2019-07-30
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    相关资源
    最近更新 更多