【问题标题】:How to define a global list in python and append local list to it如何在python中定义一个全局列表并将本地列表附加到它
【发布时间】:2017-11-22 13:15:24
【问题描述】:

我想定义一个全局列表并向其附加一个列表。我得到了一些点击事件的列表(i [0])并将其附加到mnum_list。现在我想创建一个全局列表并将该 mnum_list 附加到它。知道怎么做吗?

def OnClick(self, event):                                       
    name = event.GetEventObject().GetLabelText()
    cursor= self.conn.execute("SELECT * FROM ELEMENT where SYMBOL==?", (name,))
    elements = cursor.fetchall()
    print elements
    cursor= self.conn.execute("SELECT ATOMIC_NUMBER FROM ELEMENT where SYMBOL = ?", (name,))
    numbers = cursor.fetchone()[0]
    print numbers
    atomicnumber = numbers
    cursor= self.conn.execute("SELECT MOL_NUMBER FROM LINK where ELEMENT_NUMBER = ?", (atomicnumber,))
    mnumbers = cursor.fetchall()
    print mnumbers
    mnum_list = []
    for i in mnumbers:
         mnum_list.append(i[0])
    print mnum_list

【问题讨论】:

  • 附带说明:我个人认为全局变量是设计缺陷,如果可能的话,我会不惜一切代价避免它们。
  • @mpf82 不,您的评论好像全局变量本质上是错误的;他们不是。全局变量有完全有效的用例,例如“常量”值。当您开始尝试使用全局变量作为状态时,您开始获得意大利面条代码。
  • @mpf82:OP 正在尝试操纵全局。他们可以这样做,而不必知道如何使用global,因为没有分配给全局名称
  • 如果你有一个全局列表(some_global_list = [] 在模块级别),那么只需引用它以附加到它:some_global_list.append(mnum_list)。改变一个全局变量就是这么简单。

标签: python list onclick append global


【解决方案1】:

global语句中如果没有赋值就不需要了,只是:

def foo(x):
    sublist = range(x)
    glist.append(sublist)

在延期的情况下:

def foo(x):
    sublist = range(x)
    glist.extend(sublist)

【讨论】:

  • 修改全局对象不涉及赋值,因此global glist 行完全是多余的。扩展不需要需要+=,只需使用glist.extend()(而+=需要需要global语句)。
  • 对,感觉它只是简单地完成工作。
  • 对不起,我是新手!这里的子列表是 mnum_list ?
  • 不,它不工作!当我打印 glist 时,它没有给我任何输出 pastebin.com/fV9CZQd6
【解决方案2】:

您可以在文件/模块级别声明它,例如: my_global_list = list()

当你想在函数中附加它时,你可以使用 global 关键字。 global 关键字告诉 python 寻找全局变量。

全局 my_global_list

my_global_list.append()

【讨论】:

  • 您确实不需要在改变对象时需要使用global。仅在分配给全局名称时才需要。
  • 这有效,但没有解决我的问题!谢谢,我要问另一个问题
猜你喜欢
  • 1970-01-01
  • 2018-10-12
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多