2013-11-09 4 views
10

Я настраиваю строку на что-то в функции, а затем пытаюсь напечатать ее в другой, чтобы найти, что строка никогда не менялась. Я делаю что-то неправильно?Python Variable «resetting»

Определение переменных в верхней части моего сценария

CHARNAME = "Unnamed" 

Функция установки переменной

def setName(name): 
     CHARNAME = name 
     print CHARNAME 

Использование функции

print CHARNAME 
setName("1234") 
print CHARNAME 

Выход

Unnamed 
1234 
Unnamed 

ответ

13

Когда вы делаете CHARNAME = name в функции setName, вы определяете его только для этого объема. то есть к нему нельзя получить доступ за пределами функции. Следовательно, глобальной vriable CHARNAME (один со значением "Unnamed"), является нетронутым, и приступить к печати его содержимым после вызова функции

Вы на самом деле не переписывая глобальных переменныеCHARNAME. Если вы хотите, вы должны глобализацию в функции setName переменную CHARNAME, поставив global CHARNAME, прежде чем определить его:

def setName(name): 
    global CHARNAME 
    CHARNAME = name 
    print CHARNAME 

В качестве альтернативы, вы можете return значение CHARNAME из функции:

def setName(name): 
    return name 

CHARNAME = setName('1234') 

Конечно, это бесполезно, и вы также можете сделать CHARNAME = '1234'

+0

Спасибо за быстрый ответ! Оба моих исправления работали для меня – Zooty