python - 从 vars() 和 dict={} 创建的字典有什么区别?

标签 python variables dictionary

读完 vars() 后,我仍然对它实际在做什么感到有点困惑。在查看 Python 文档时,“如果对象具有 __ dict __ 属性,则 vars() 函数返回给定对象的 __ dict __ 属性。”那么,它返回一个字典对象?以下是我真正关心的问题:

1) 下面的代码中 vars() 实际上做了什么?

dict = {}
dict['H'] = atom
vars()[dict['H']] = 20

2) 为什么我创建的字典前面需要 vars() ,我可以省略它吗? (我知道如果我省略它,代码就会失败,但是完成相同任务的不同方法是什么?)

dict = {}
dict['H'] = atom
dict['H'] = 20

最佳答案

What is vars() actually doing in the below code?

它做了它一贯做的事情:它将所有局部变量作为字典检索。这就是在不带参数调用 vars 时的工作原理。

Why is the vars() necessary in front of the dictionary I created and could I leave it out?

似乎有人在本地范围内搞恶作剧。只是它是用 dict['H'] 包装的,它只是一些变量(可能 atom 是一个字符串)。换句话说,他试图通过动态名称检索变量。例如

>>> test = 15
>>> x = 'test'
>>> vars()[x]
15

应该不惜一切代价避免这种情况。忘记您甚至不知道 vars() 的存在。我不知道您必须使用 vars() 而不是字典或其他“正常”(在这种情况下安全)结构的情况。您正在查看的代码非常难以维护、容易出错并且存在严重的安全问题。

关于python - 从 vars() 和 dict={} 创建的字典有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055334/

相关文章:

python - _imaging C 模块未安装 Python 嵌入

Java 类型变量依赖不匹配

html - 如何覆盖 sass 中的 Bootstrap 变量?

c# - 如何将数组转换为字典

c++ - == 为 std::map 定义的运算符

python - NumPy/SciPy 中的广义累积函数?

python - 如何在 sortedcontainers.SortedDict 中设置排序谓词?

python - 使用phonenumbers包解析后如何获取国家代码和国家电话号码?

java - protected 访问修饰符

python - 在包含字典的列表中获取最小值(键,值)