在关于迭代创建变量的 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] 删除。
我来说两句