2014-08-28 5 views
0

Я использую WinPython для кодирования программы, которая использует глобальную переменную, это код:глобальная переменная в Python, это нормальное поведение?

def main(): 
    global listC 
    listC=[1,2,3,4,5] 

def doSomething(): 
    if listC!=[]: 
     pass 

Проблема, что у меня есть, что линия, которая говорит, что если listC = ... бросает мне! предупреждение, указывающее «неопределенное имя listC»; эта программа фактически компилируется и выполняется нормально, но я хотел бы знать, почему это предупреждение появляется, если я объявил список как глобальную переменную.

Я хотел бы, чтобы выполнить его следующим образом:

programName.main()  //init the list 
programName.doSomething() //do an operation with the list 
programName.doSomething()  //same as before 
... 

Благодаря

+0

Я должен согласиться с jsbueno ниже, что-то еще должно происходить с listC в doSomething(). Код, который вы опубликовали, отлично работает. – whitebeard

ответ

0

Это должно работать ... Это работает для меня.

def doSomething(): 
    if listC != []: 
     print "success!" 

def main(): 
    global listC 
    listC = [1,2,3,4,5] 
    doSomething() 

>>> main() 
success! 
+0

неправильно. Нет такой необходимости - до тех пор, пока она объявляется глобальной в «main» и этот код запускается первым. – jsbueno

+0

@jsbueno Конечно! Не знаю, о чем я думал ... Это прекрасно работает ... изменил мой ответ ... – whitebeard

1

С частями кода вы показываете нам, что должны работы - однако, так как вы получаете сообщение об ошибке, что происходит в том, что вы делаете задание listC в какой-то момент в корпусе функции doSomething.

Если есть такое поручение, Python будет рассматривать listC переменную как локального к doSomething - если вы положили список его в качестве глобального на самого начало функции - и, конечно же, вы также должны объявить его как глобальный в функции, которую вы инициализируете, - main в этом случае, и убедитесь, что код инициализации выполняется до вызова doSomething.

def main(): 
    global listC 
    listC=[1,2,3,4,5] 

def doSomething(): 
    global listC 
    if listC != []: 
     print "success!" 
    # the following statement would trigger a NameError above, if not for the "global": 
    listC = [2,3] 
Смежные вопросы