【发布时间】:2016-01-23 06:56:35
【问题描述】:
我的代码看起来有点像这样:
import os, sys
ABC = ''
XYZ = ''
FOO = ''
BAR = ''
ITEM = ''
CLEAN = ''
values = ['ABC', 'XYZ', 'FOO', 'BAR', 'ITEM', 'CLEAN']
# some code here
c = raw_input('> ')
if ' ' in c:
c = c.lower()
c = c.split()
if c[0] == 'set':
if c[1] in values:
exec("%s = '%s'" % (c[1], c[2]))
else:
# error...
# the code continues
如您所知,我正在尝试为变量赋值,但根据用户输入来决定该变量,而不是通过其名称来引用它。
基本上,我想要的是在开始时将c[2] 字符串分配给任一变量,这取决于用户在c[1] 中选择的变量,并且在此过程中,通过相同的别名引用这些变量(或类似的东西)。
# Desired input
> set FOO yes
> print FOO
# Desired output
yes
# Desired input 2
> set ITEM dark
> print ITEM
# Desired output 2
> dark
我什么都想不出来。
================================================ ==============================
编辑:我编辑了代码以查看是否有帮助,但没有。无论我用 set 输入什么,它都会卡在 else 条件下。
编辑 2:这就是解决我的问题的方法:
1) 将values 列表转换为所有字符串
2)将.upper()添加到c[1]
感谢 Leopold 发现问题所在。
【问题讨论】:
-
你的 if 条件
if c[1] == str(val)永远不会成功,因为列表中的所有元素都是空的 -
是的,
values只是一个空字符串列表。您无法获得变量的实际名称。 -
我可以看到你正在尝试做“变量变量”,这对于有经验的 Python 程序员来说很少是正确的做法,对于没有经验的程序员来说也不是正确的做法。它笨拙、缓慢且脆弱,99.9% 的时间(至少)完全没有必要。
标签: python string variables reference alias