为了账号安全,请及时绑定邮箱和手机立即绑定

动态设置局部变量

动态设置局部变量

幕布斯6054654 2019-06-26 13:49:58
动态设置局部变量如何在Python中动态设置局部变量?(其中变量名是动态的)最新情况:我知道这不是一个好的做法,而且这些评论都是合理的,但这并不意味着这是一个糟糕的问题,只是一个更理论性的问题-我不明白为什么这样做有理由被否决。
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

其他人建议分配给locals()..这在函数中不起作用,在该函数中,可以使用LOAD_FAST操作码,除非你有一个exec函数中某个位置的语句。为了支持这个语句(它可能会创建编译时不知道的新变量),Python将被迫按函数中的名称访问局部变量,因此编写locals()起作用了。这个exec可能不在执行的代码路径之外。

def func(varname):
    locals()[varname] = 42
    return answer           # only works if we passed in "answer" for varname
    exec ""                 # never executedfunc("answer")>>> 42

注意:这只适用于Python2.x。他们在Python 3和其他实现(Jython、IronPython等)中消除了这种愚蠢之处。也可能不支持。

不过,这是个坏主意。如果您不知道变量的名称,您将如何访问它们?通过locals()[xxx]可能吧。所以为什么不直接用你自己的字典而不是污染locals()(并且冒着重写函数实际需要的变量的机会)?


查看完整回答
反对 回复 2019-06-26
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

(给其他人做个简短的留言)

好吧,所以修改locals() 不是要走的路(同时修改globals() 才能起作用)。同时,exec 可能是,但速度慢得令人痛苦,因此,与正则表达式一样,我们可能希望compile()它首先:

# var0 = 0; var1 = 1; var2 = 2code_text = '\n'.join( "var%d = %d" % (n, n) for n in xrange(3) )filename = ''code_chunk = compile( code_text, filename, 'exec' )# now later we can use exec:exec code_chunk # executes in the current context


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 583 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信