动态创建变量是个好主意吗?

时间:2016-02-17 13:57:24

标签: python variables python-3.5 dynamic-variables

我最近发现了如何通过这种方法在python中动态创建变量:

vars()['my_variable'] = 'Some Value'

因此创建变量my_variable

我的问题是,这是一个好主意吗?或者我应该提前声明变量吗?

5 个答案:

答案 0 :(得分:5)

我认为如果可能的话,最好使用词典:

vars_dict = {}
vars_dict["my_variable"] = 'Some Value'
vars_dict["my_variable2"] = 'Some Value'

我认为它更像是pythonic。

答案 1 :(得分:2)

这是一个坏主意,因为分析代码变得更加困难,无论是对于查看源代码的人,还是对于像pylint或pychecker这样的工具。如果你使用这样的技巧,你将更有可能引入错误。如果您认为某个时候需要该功能,那么如果能以更简单,更传统的方式解决问题,请认真思考。我已经使用Python近20年了,从来没有觉得有必要这样做。

如果您有更多动态需求,只需使用普通字典,或者像json那样。

Python的一大优点,它的动态特性和良好的标准集合类型,是你可以避免将逻辑放在文本字符串中。 Python解释器,IDE中的语法突出显示,智能感知和代码分析工具都可以查看源代码,提供有用的建议并查找错误和缺陷。如果您的数据结构或逻辑已隐藏在文本字符串中,则此功能无效。

更愚蠢和僵化的语言,如C ++和Java,经常使开发人员使用基于字符串的数据结构,如XML或json,因为他们没有像Python列表或dicts这样的方便集合。这意味着您可以隐藏编译器中的业务逻辑以及语言或工具中内置的其他安全检查,并且必须对您的开发工具进行大量检查。在Python中你不必这样做......所以不要!

答案 2 :(得分:2)

<强>优点:

  • 增加了另一层间接性,使环境更具动态性
    • 特别允许避免更多的代码重复

<强>缺点:

  • 不适用于函数名称空间(由于优化)
  • 添加了另一个间接层,使环境更具动态性
    • “词汇参考”更难以跟踪和维护
      • 如果创建的名称是任意的,则冲突正在等待发生
      • 很难在代码库中找到进出口并预测其行为
      • 这就是为什么这些技巧可能会扰乱像pylint
      • 这样的代码检查工具
  • 如果以类似的方式处理变量,它们可能与其他变量(在专用的dict中)分开,而不是重用命名空间字典,从而使其变得混乱

简而言之,在抽象级别上,Python的语言和运行时功能是专为其设计的,它只适用于小而明确定义的数量。

答案 3 :(得分:1)

无法保证vars()['myvariable'] = 'Some value'my variable = 'Some value'具有相同的效果。来自documentation

  

没有参数,vars()就像locals()一样。请注意,当地人   字典仅对本地的更新有用   字典被忽略了。

这段代码完全没错。

答案 4 :(得分:0)

我不知道它有什么优势,也会让你的代码更难理解。 所以,不,我认为这不是一个好主意。