2015-12-11 2 views
0

Я новичок в python, и я хотел просто сменить переменные с помощью globals(), но по какой-то причине я продолжаю получать одинаковые outpu (1, 2, 3 вместо a, b, c) , Что здесь не так?Почему globals() не работает

cwp = "01" 
aw_sg = "01" 

a01 = 1 
a02 = 2 
a03 = 3 

p01g01a01 = "a" 
p01g01a02 = "b" 
p01g01a03 = "c" 

print a01, a02, a03 


def load_db(a01, a02, a03, cwp, aw_sg): 

    a01 = globals()["p%sg%sa01" % (cwp, aw_sg)] 
    a02 = globals()["p%sg%sa02" % (cwp, aw_sg)] 
    a03 = globals()["p%sg%sa03" % (cwp, aw_sg)] 

    return a01, a02, a03 

load_db(a01, a02, a03, cwp, aw_sg) 

print a01, a02, a03 
+1

Вы фактически не хранить возвращаемое значение 'load_db' где-нибудь, и так как вы не отметили a01, a02, a03 и как' 'global' внутри load_db', глобальный охват-a01/и т.д. не являются перезаписывается. (Я предполагаю, что вы задаете это по чисто академическим соображениям и фактически не используете 'globals()' willy nilly, как это.) – senshin

+3

Вы назначаете локальные переменные, называемые 'a01',' a02' и 'a03' внутри' load_db'. Это не изменяет глобальные переменные. Используйте возвращаемое значение, например. 'print load_db (a01, a02, a03, cwp, aw_sg)'. Использование имен реальных переменных также является хорошей идеей, и не использование 'globals()' является еще лучшей идеей. – Ryan

+0

@ senshin yup Я использую этот пример, чтобы просто понять, как это работает – JeremyK

ответ

2

Вы использовали globals() функцию для доступа к глобальным переменным, но вы назначили их на локальные переменные внутри функции, и это не меняет глобальные переменные. Если вы хотите изменить глобальные переменные, вы можете переназначить возвращаемые значения по функции глобальным переменным.

a01, a02, a03 = load_db(a01, a02, a03, cwp, aw_sg) 
print a01, a02, a03 
+0

Спасибо за ответ и объяснение, он отлично работает – JeremyK

Смежные вопросы