12

有没有办法从字符串创建全局变量?我知道你可以像这样从字符串中创建一个变量:

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

因此使 hello 变量等于 10。我不知道如何使该用户输入变量成为全局变量,但这不起作用:

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

2 回答 2

26

您可以使用以下globals()功能:

name = "hello"
globals()[name] = 10
于 2012-05-29T20:37:54.587 回答
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')
于 2016-02-26T20:54:29.417 回答