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

标签 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)

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

最佳答案

问题是在函数内部使用exec时需要指定作用域。

如果将其更改为:

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

它按预期工作,因为你没有 local 变量(你将它们声明为 global)所以你将全局范围作为 local 范围传递到 exec 以便它知道 tile1turn


但是,它滥用了 exec,你不应该那样使用它!

关于python - exec 函数在 python 3.6 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46378216/

相关文章:

python - 为什么 python 整数缓存范围 [-5, 256] 不能在所有平台上以类似的方式工作?

python - 从 Linux centos 7.0 终端而不是从 python 控制台运行时的 os.makedirs 问题

c++ - 在 C++ 中声明一个函数指针数组

c++ - 重载指向重载函数的指针

python - Pyramid 目录结构困惑

python - 如何查找某个时区的下一个上午 7 点

javascript - 为什么 Function.toString 会这样工作?

python - 定义顺序在模块命名空间中可用吗?

python - 为什么 `item["错误“] : "message"` NOT a syntax error in python 3. 6?

python - Mypy 拒绝使用 `type(name, (bases,), {})` 创建的类型对象