通过raw_input为变量赋值?

时间:2012-11-29 09:59:41

标签: python logic

我试图从用户输入变量,但不是字符串,浮点数或整数,我希望它分配一个已定义的不同变量。伪的例子:

xy = 23
a = raw_input("Enter a variable") xy
print (a)
23

是的,这可以通过if变量来控制,但对于许多变量,我认为这不是很实用吗?我打字就没问题,只是想知道这不是不好的做法吗?

3 个答案:

答案 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