【问题标题】:adding to a list defined in a function添加到函数中定义的列表
【发布时间】:2011-10-28 13:46:12
【问题描述】:

如何在函数中创建一个列表,追加到它,然后将另一个值传递给函数以追加到列表中。

例如:

def another_function():
    y = 1
    list_initial(y)

def list_initial(x):
    list_new = [ ]
    list_new.append(x)
    print list_initial

another_function()
list_initial(2)

谢谢!

【问题讨论】:

  • 不清楚你在问什么。您拥有的代码可以正常工作,但我不明白another_functionlist_initial 有什么关系。这段代码有什么不是你想要的吗?
  • 我的错误。我修复了另一个函数。

标签: python list function append


【解决方案1】:

如果你想要一个作用域为你的函数的列表,你可以这样做:

def list_at_function_scope(arg,lst=[]):
    lst.append(arg)
    return lst

print list_at_function_scope(2)
print list_at_function_scope("qwqwe")

它看起来像这样:

>>> print list_at_function_scope(2)
[2]
>>> print list_at_function_scope("qwqwe")
[2, 'qwqwe']

请注意,这通常被认为是 python 中众所周知的反模式/错误。只是为了让您知道自己要做什么。

【讨论】:

  • 谢谢!有什么建议可以用更像 python 的方式来做这件事吗?
  • “类似python的方式”,也称为“pythonic”,非常经常被误解。我见过的大多数所谓的“pythonic”代码示例与开发人员自己的定义(释义)完全相反:“要清晰简洁”,就是这样。
  • 你能告诉我为什么会这样吗?我在哪里可以了解更多信息?
【解决方案2】:

我猜你在追求这样的东西:

#!/usr/bin/env python

def make_list(first_item):
    list_new = []
    list_new.append(first_item)
    return list_new

def add_item(list, item):
    list.append(item)
    return list

mylist = make_list(1)
mylist = add_item(mylist, 2)

print mylist    # prints [1, 2]

甚至:

#!/usr/bin/env python

def add_item(list, item):
    list.append(item)
    return list

mylist = []
mylist = add_item(mylist, 1)
mylist = add_item(mylist, 2)

print mylist    # prints [1, 2]

但是,这种操作通常不值得用函数包装。

#!/usr/bin/env python

#
# Does the same thing
#
mylist = []
mylist.append(1)
mylist.append(2)

print mylist    # prints [1, 2]

【讨论】:

  • list.append() 修改列表,因此您不需要从 add_item 返回列表 .. 并且您的 make_list 函数可以只在一行中使用 return [ first_item ],而不是三行。
  • 没错,但我试图不偏离 OP 的原始代码太远。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 2010-10-31
  • 2021-07-23
  • 1970-01-01
相关资源
最近更新 更多