迭代创建变量: globals() 的安全替代方法是什么?

尼古拉斯·热维斯

在关于迭代创建变量的 S/O 线程中,大多数回复建议使用globals(),但强调使用全局范围是危险的事实。然而,locals()并且vars()还可以反复地创建变量使用。例如:

for i in range(1, 6):
    vars()[f'variable_{i}'] = i

print(key for key in vars().keys() if 'variable' in key)

Out[2]: ['variable_1', 'variable_2', 'variable_3', 'variable_4', 'variable_5']

locals()vars()安全迭代创建变量?如果是这样,为什么他们从未被提及,而不是globals()

切普纳

分配给的输出vars实际上并没有修改本地范围;它只是填充一个映射,您只能通过vars(). 观察员:

>>> def bar():
...   for i in range(6):
...     vars()[f'var_{i}'] = i
...   print(vars()['var_3'])
...   print(var_3)
...
>>> bar()
3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in bar
NameError: name 'var_3' is not defined

既然你已经致力于映射语义,你也可以只使用一个dict

def bar():
    data = {}
    for i in range(6):
        data[f'var_{i}'] = i
    print(data['var_3'])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么 globals() 在迭代过程中改变了大小?

动态创建变量和修改globals()

Python:globals()。items()迭代尝试更改字典

使用列表推导查找变量可用于globals(),但不适用于locals()。为什么?

公共静态变量的最佳替代方法是什么?

Jenkins文件,检查Globals变量是否存在

为什么globals()是Python中的函数?

关于pandasql locals()和globals()方法问题

如何使用 globals() 函数调用类方法?

用Java创建Temp文件的安全方法是什么?

创建线程安全单例的正确方法是什么?

为什么globals [x]通过编辑器检查,但是globals [E]给出预期的错误括号?

PHP:用户声明的变量将覆盖$ GLOBALS中的变量

如何在ejs / express中的Globals变量中使用函数?

如何使用$ GLOBALS在php文件之间共享变量?

在GLOBALS函数中使用Mysqli_connect链接安全吗?

Azure 函数应用中全局变量的替代方法是什么?

globals(),locals()和vars()有什么区别?

在python中使用带有类方法的globals()

为什么在迭代时创建条件检查变量是否为 -1?

全球与$ GLOBALS

制作游戏-安全变量的优点是什么?

Firebase安全规则变量的范围是什么?

在 Python 中使函数中的所有变量成为全局变量的可能替代方法是什么?

创建使用变量的HQL查询的最佳方法是什么?

在JsRender中创建变量的好方法是什么?

通过级联变量创建Unicode字符的预期方法是什么?

在现有系统驱动器上创建引导扇区的最安全方法是什么?

有什么方法可以创建此处文档来替代bash中的某些变量,但不能替代其他变量?