python中的exec()命令无法从函数内部更改全局变量

时间:2019-06-24 15:15:57

标签: python function exec global

标题说出我所知道的一切

def fun():
    global v
    v = 1
    exec("global " + "k")
    exec("k" + " = 1")

fun()

print(v)
# prints 1
print(k)
# NameError: name 'k' is not defined

我希望算法为v和k都打印1,但出现错误。

2 个答案:

答案 0 :(得分:0)

只需将globals()添加到exec函数调用中即可:

def fun():
    global v
    v = 1
    exec("k" + " = 1", globals())

fun()

print(v)
# prints 1
print(k)
# prints 1

答案 1 :(得分:0)

如果您需要使用exec,则可以像这样分配k的值

def fun():
     exec("globals()['k'] = " + "1")

fun()

print(k) # output is 1