Python Variable "resetting"

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

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

CHARNAME = "Unnamed"

Функция, устанавливающая переменную

def setName(name):
        CHARNAME = name
        print CHARNAME

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

print CHARNAME
setName("1234")
print CHARNAME

Выход

Unnamed
1234
Unnamed

Ответ 1

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

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

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

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

def setName(name):
    return name

CHARNAME = setName('1234')

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