2017-06-20 41 views
1

我想定义一个全局列表并为其添加一个列表。我通过点击事件获得一个列表(我[0]),并将其附加到mnum_list。现在我想创建一个全局列表并将该mnum_list追加到它。任何想法如何做到这一点?如何在python中定义一个全局列表并追加本地列表

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 
+1

[比创建它们的另一个函数使用全局变量]的可能的复制(https://stackoverflow.com/questions/423379/using -global-variables-in-a-function-other-than-the-one-that-c​​reated-them) –

+0

附注:我个人认为全局变量是一个设计缺陷,如果可能的话,我会尽可能避免它们。 –

+0

@ mpf82不,你的评论表现得好像全局变量本质上是错误的;他们不是。全局变量有完美有效的用例,例如“常量”值。当你开始尝试使用全局变量作为你开始获得意大利面代码的状态时。 –

回答

1

有一个在global声明没有必要,如果没有转让,只是:

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

,并在延伸的情况下:

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

变更全局对象不涉及赋值,所以'global glist'行是完全多余的。扩展不*需要*'+ =',只需使用'glist.extend()'(和'+ ='*将要求'global'语句)。 –

+0

对,感觉就像它会直接做这项工作。 – Dimgold

+0

对不起,我是新手!这里子列表是mnum_list? –

0

可以声明其上的文件/模块级别如: my_global_list = list()

当你想要在一个函数内附加它,你可以使用全局关键字。 global关键字告诉python查找全局变量。

全球my_global_list

my_global_list.append()

+2

你做**不需要在变异对象时使用'global'。这只在分配给全局名称时才需要。 –

+0

这工作,但没有解决我的问题!谢谢,我不得不提出另一个问题 –

相关问题