我试图从用户输入变量,但不是字符串,浮点数或整数,我希望它分配一个已定义的不同变量。伪的例子:
xy = 23
a = raw_input("Enter a variable") xy
print (a)
23
是的,这可以通过if变量来控制,但对于许多变量,我认为这不是很实用吗?我打字就没问题,只是想知道这不是不好的做法吗?
答案 0 :(得分:3)
您可以使用globals()
获取包含全局命名空间中所有变量的dict,或使用locals()
获取本地命名空间:
>>> xy = 23
>>> a = globals()[raw_input("Enter a variable ")]
Enter a variable xy
>>> print (a)
23
>>> globals()
{'a': 23, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None
, 'xy': 23, '__name__': '__main__', '__doc__': None}
More info关于他们。在顶级,两者都将返回相同的dict,但在函数内部使用时可以看到差异:
>>> def foo(x):
... print globals()
... print locals()
...
>>> foo(10)
{'a': 23, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None
, 'xy': 23, '__name__': '__main__', 'foo': <function foo at 0x00BC5FB0>, '__doc_
_': None}
{'x': 10}
请注意,此技术不会以任何方式涉及eval
,因此如果用户尝试输入恶意输入,则只会引发keyError
。但是,根据您计划对变量执行的操作,可能存在一些安全风险(在这种意义上,使用locals()
更安全,因为您可以控制可以通过这种方式访问的精确变量集)。
答案 1 :(得分:1)
你在找这样的东西吗?
xy = 23
a = eval(raw_input("Enter a variable"))
print (a)
在用户输入未知变量的情况下添加支票的任务留给读者......
还要注意这种方法的潜在安全问题。更安全的方法是通过定义dict
应使用的特定eval
来限制评估范围。阅读help(eval)
。
答案 2 :(得分:1)
只要将你的var保存在dict中,它也可能是最安全的:
In [52]: d={'x':1,'y':2,'z':3}
In [53]: a=d.get(raw_input('enter var'),None)
示例:
In [57]: a=d.get(raw_input('enter var: '),None)
enter var: y
In [58]: print a
2
In [59]: a=d.get(raw_input('enter var: '),None) # You can specify a default value
enter var: Foo
In [60]: print a
None