将包含Python变量赋值文本的String转换为实际变量

时间:2015-09-10 22:30:31

标签: python

我试图将包含Python变量赋值的String转换为实际变量。

以下是为我工作的。

    s = "VAR = [1,55]"
    exec(s)
    print(VAR)

但是当将此代码放在函数中时,VAR永远不会被定义。

    def myFunction():
        s = "VAR = [1,55]"
        exec(s)
        print(VAR)

    myFunction()    

我不确定我错过了什么。在此先感谢您的帮助!

回答一些问题......

错误消息:" NameError:name' VAR'未定义"

使用:Python 3

3 个答案:

答案 0 :(得分:2)

python 2.7

def myfunc():
    v1 = 11
    exec "v1 = 22"
    print v1

myfunc() # 22

def myFunction():
    VAR = None
    s = "VAR = [1,55]"
    exec(s)
    print(VAR)

myFunction() # [1, 55]

OR

def myFunction():
    #VAR = None
    s = "VAR = [1,55]"
    exec(s)
    print(locals()["VAR"])

myFunction() # [1,55]

答案 1 :(得分:2)

你也可以将全局变量传递给exec:

def myFunction():
    s = "VAR = [1,55]"
    exec(s, globals())
    print(VAR)

related

答案 2 :(得分:1)

在Python 2.7中你可以做到:

>> s = "VAR=55"
>> exec(s)
>> VAR
55

如果您需要自定义命名空间,请执行以下操作:

>> my_ns = {}
>> exec "VAR=55" in my_ns
>> my_ns["VAR"]
55

类似适用于Python 3,但exec实际上有一个函数,因此使用exec(...)。例如:

>> s = "VAR=55"
>> exec(s)
>> VAR
55

当你使用功能时,范围发挥作用。您可以使用locals()globals()或使用自定义命名空间:

>>def foo():
    ns = {}
    s = "VAR=55"
    exec(s) in ns
    print(ns["VAR"])

>>foo()
55