python - 函数中的命令执行,名称错误 - python3
问题描述
我是 Python 的初学者,我遇到了一个我无法理解的问题。我试图用 exec() 定义一个变量,然后打印它。它运作良好。但是当我在函数中执行相同的代码时,它不起作用......
例子 :
def fonct():
possibilite = [0,1,2,3]
testc = 0
testl = 1
commande = "proba"+str(testc+1)+str(testl)+" = possibilite"
exec(commande)
print(commande)
print(proba11)
同样的事情,但在函数中没有结果,命令 print(proba11) 返回 [0,1,2,3] 所以它可以工作。但对于我得到这个的例子:
proba11 = possibilite
NameError: name 'proba11' is not defined
没有关于全球人或本地人的故事,一切都是本地人......
解决方案
由于局部变量的存储方式,在 Python 3 中更新局部变量exec()
很棘手。它曾经在 Python 2.7 及更早版本中工作。
要解决此问题,您需要
- 将显式
locals
字典传递给exec
- 从更新的本地字典中获取新定义的变量
像这样:
def fonct():
possibilite = [0, 1, 2, 3]
testc = 0
testl = 1
varname = "proba" + str(testc + 1) + str(testl)
commande = varname + " = possibilite"
_locals = locals()
exec(commande, globals(), _locals)
proba11 = _locals[varname]
print(proba11)
哪个按预期工作。
你可以在这里读更多关于它的内容:
推荐阅读
- arrays - 使用惰性 var 并且 Xcode 仍然说不能使用实例,属性初始化程序在“自我”之前运行?
- angular - 即使在尝试了多种方式之后,GitLab 管道也经常失败
- rabbitmq - 如何在 MQ 上捕获错误请求?
- regex - 设置正则表达式的优先级
- angular - 动态设置 scss 变量 angular ionic
- python - 如何使用 XPath 查找标题包含单引号和双引号的元素?
- intellij-idea - IntelliJ - 仅更改项目菜单的文本大小
- azure - 在 Azure 应用服务中更改系统日期?
- python - 重命名 groupby 的列名并使用 Pandas 计算结果
- android - 单击项目后,recyclerview 中的项目数量会自行增加