Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将字符串转换为变量名_Python_Python 2.7 - Fatal编程技术网

在python中将字符串转换为变量名

在python中将字符串转换为变量名,python,python-2.7,Python,Python 2.7,我有绳子。比如“水牛” x='buffalo' 我想把这个字符串转换成变量名,比如 buffalo=4 不仅是这个示例,我还想将任何输入字符串转换为某个变量名。(在python中)我应该如何做呢?这是我所知道的在python中创建动态变量的最好方法 my_dict = {} x = "Buffalo" my_dict[x] = 4 我在这里发现了一个类似但不相同的问题 您可以使用字典跟踪键和值 例如 dictOfStuff = {} ##Make a Dictionary x = "B

我有绳子。比如“水牛”

x='buffalo'
我想把这个字符串转换成变量名,比如

buffalo=4 

不仅是这个示例,我还想将任何输入字符串转换为某个变量名。(在python中)我应该如何做呢?

这是我所知道的在python中创建动态变量的最好方法

my_dict = {}
x = "Buffalo"
my_dict[x] = 4
我在这里发现了一个类似但不相同的问题

您可以使用字典跟踪键和值

例如

dictOfStuff = {} ##Make a Dictionary

x = "Buffalo" ##OR it can equal the input of something, up to you.

dictOfStuff[x] = 4 ##Get the dict spot that has the same key ("name") as what X is equal to. In this case "Buffalo". and set it to 4. Or you can set it to  what ever you like

print(dictOfStuff[x]) ##print out the value of the spot in the dict that same key ("name") as the dictionary.
字典与现实生活中的字典非常相似。你有一个词,你有一个定义。你可以查这个词并得到它的定义。在这个例子中,你有“水牛”这个词,它的定义是4。它可以用于任何其他单词和定义。一定要先把它们放进字典里

x='buffalo'    
exec("%s = %d" % (x,2))
之后,您可以通过以下方式进行检查:

print buffalo
作为输出,您将看到:
2

为什么要这样做?如果需要将字符串映射到值,通常会使用字典。目前为止,没有一个答案能够处理常见的错误情况,例如字符串中有空格或句点。您需要进一步解释这是如何解决OPs问题的,最重要的是,请参阅
x
,不是字符串文字。@horns:这里哪个变量的名称是保留关键字?@horns:啊,它被编辑掉了。谢谢。我不明白这个解决方案。我的dict[“Buffalo”]打印4吗?正确的答案应该是print(Buffalo)应该是4,比如print(x),而不是print(my_dict[“Buffalo”])。我在另一个脚本中使用了这个。奇怪的是,我的dict[x]=my dic[x]+n在工作,而我的dict[x]+=n不工作。为什么会发生这种情况?即使在非常罕见的情况下,你有一个很好的理由动态创建一个变量,这不是这样做的方式;只需使用
setattr
。即使由于任何原因,
setattr
不合适,显式地修改
locals
globals
仍然比
exec
好。我只是展示了与OP请求完全相同的解决方案。+1因为这是OP想要的,尽管它非常不安全,不应该被用户使用。
exec()
并不危险:危险的是关于如何以及在何种环境下使用它的问题。@BillalBEGUERADJ感谢您为对话增添了一些意义。人们总是盲目地对exec/eval感到恐惧,因为他们永远不知道它在正确使用时有多么强大和有用。