And*_*din 3 python string function keyword argument-passing
大多数人可能会说这是一个坏主意。我想使用字符串的内容作为变量的名称。我想完成可怕的事情:
s = 'x'
x = 1
变量名x(不知何故?)来自 string 的地方s。
要回答“为什么?”,假设我有一个全局默认值x,我想要在函数中覆盖的选项。但:
x = 0
def f(**kw):
    print x
f(x=1)
打印0不1。如果我可以使用 kw.keys() 中的字符串重新分配x(或任何其他全局设置的变量),那么我会很高兴。
我意识到,这适用于重新分配x的f:
x = 0
def f(x=x):
    print x
f(x=1)
但是我想在我的命名空间中有许多变量的情况下这样做,我可能在某个时候想要覆盖而不重写我的模块中的每个函数定义。
检查执行
>>> print x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> s = 'x'
>>> exec(s + " = 1")
>>> print x
1 
另请参阅:如何在 python 中使用 eval 分配变量的值?
经过一些实验,这似乎也有效:
>>> print x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> s = 'x'
>>> globals()[s] = 1
>>> print x
1
| 归档时间: | 
 | 
| 查看次数: | 11983 次 | 
| 最近记录: |