2012-05-29 6 views
6

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

string = 'hello' 
    val = 10 
    vars()[string] = val 

Таким образом, делая привет переменной равным 10. Я не знаю, как сделать, что пользовательский ввод переменной, однако глобальный, это не работает:

string = 'hello' 
    val = 10 
    vars()[string] = val 
    eval("global " + string) 
+8

Зачем вам это нужно? Почему вы не используете словарь? Это было бы намного чище. –

+0

Точно так же, как наблюдение на стороне: в течение более десяти лет написания Python, я никогда - буквально не один раз - когда-либо нужно было делать что-то отдаленно близко к этому. –

ответ

13

Вы можете использовать функцию globals():

name = "hello" 
globals()[name] = 10 
+0

* headdesk * Отлично работает, спасибо! – Peter

+2

@ пользователь1424641 проверка как ответ тогда? – corn3lius

+4

@ user1424641: Если вам нужно это сделать, возможно, что-то не так с вашей реализацией. –

0

Установка глобальных переменных из модуля:
Я попытался что-то подобное, пытаясь упростить мою версию argparse, чтобы она позволяла минимальное дублирование имен, поддерживать нечувствительные к регистру множественные символы символов, но все же устанавливать глобальные переменные со смешанными флагами. Единственное решение, с которым я мог придумать, - это вернуть список операторов, который я мог бы выполнить. Мои попытки выполнить команду в модуле не увенчались успехом. Мой пример:

Самотестирование

def main(): 
print "Some tests with provided args" 

One = 1 
Two = 2 
Three = 3 

prs = ArgumentParserCI(description='process cmdline args') 
prs.add_argument('One') 
prs.add_argument('Three') 
cmdlineargs = ['-one', 'one', '--thr', "III"] 
argsdict, unknownargs, execlist = prs.parse_args(cmdlineargs) 
exec(execlist) 
print("cmdlineargs:", cmdlineargs) 
print (One, Two, Three) 


if __name__ == "__main__": 
main()  

Распечатка:

Some tests with provided args 
('cmdlineargs:', ['-one', 'one', '--thr', 'III']) 
('one', 2, 'III')