【Python】exec使用时的一些注意事项

【未经本人同意不得私自转载】
【本文发布于CSDN,地址为:https://blog.csdn.net/weixin_44733774/article/details/124692142



书承上文globals和locals的一些细节向问题,不过本篇内容和globals()、locals()的关联性不是很强。

博客中出现的代码传到gayhub中:https://github.com/Ls-Jan/Python_LanguageFeatures/tree/main/exec





二、exec()

学乖了学乖了,被locals()这个玩意儿坑怕了之后不敢乱莽,先查查exec()的官方说明:exec(object[, globals[, locals]])
其中提及到许多内容但都不是很详尽,这里一 一列举


1、如果exec不传入字典的话将会默认传入globals()和locals()

    




2、如果exec传入字典一个字典的话那么会作为全局和本地变量使用

  即,在exec中定义的变量将保存到这个字典中。
  补充一点没用的东西:这个字典会被添加 __builtins__
    




3、如果exec传入两个字典的话这两个字典将依次作为全局变量和局部变量使用

  exec可以执行包含global字样的代码的,这不矛盾。细节方面请自行尝试,这边就不多介绍了(主要是好累…)
  还有一点要补充的就是,py“不是没有分号”,而是“不建议使用分号”(因为使用分号会造成可读性下降
    




4、函数内使用exec的话建议传入指定字典,用于记录以及使用变量

  在第1点中已经提及了,exec如果不传字典的话会默认使用globals()和locals()的。
  函数每次调用时locals()都是新的(这很正常,要是不刷新的话问题就大了),也就是你在函数里执行exec时定义的变量在下一次函数调用时会“消失”。
  一般没啥特别的需求的话,传入一个字典就足矣。至于这个字典要存在哪里,见仁见智吧,建议存进类对象里
    





题外话:
exec的解释器可是很乖的,传入exec的局部变量字典和解释器的局部变量严格同步。
也就是你往exec里头传进去的局部变量,exec的解释器会老老实实地使用。
  







以为一两小时不到就应该能写完的博文,结果又是大半天过去,只能说效率感人。

猜你喜欢

转载自blog.csdn.net/weixin_44733774/article/details/124692142