exec函数在python 3.6中无法正常工作

时间:2017-09-23 09:44:42

标签: python function python-3.6 python-exec

我编写的代码

tile1=0; player1=1; turn=player1

def s():
   global tile1,turn,player1
   print("Before",tile1)
   string='tile' + '1' # I am getting 1 by some function that's why I need to create variable string                                     
   exec("%s=%d" %(string,turn))
   print("After",tile1)  
s()

输出我的预期
在0之前 1

之后

输出我得到的内容
在0之前 0后

如果我在没有函数的情况下编写代码,它会给出预期的输出

tile1=0; player1=1; turn=player1
print("Before",tile1)
string='tile' + '1'                                  
exec("%s=%d" %(string,turn))
print("After",tile1)

我想问一下如何纠正这段代码,以便获得预期的输出。另外,我不允许使用列表和字典。

1 个答案:

答案 0 :(得分:3)

问题是您需要在函数内部使用exec时指定范围。

如果您将其更改为:

exec("%s=%d" %(string,turn), None, globals())

它按预期工作,因为您没有local个变量(您声明它们为global),因此您将全局范围作为local范围传递给exec,因此它知道关于tile1turn

然而,这是误导exec,你不应该这样使用它!