我正在使用Python 2.5。在下面的代码中,要根据x的值打印err1,err2或err3。是否可以通过加入“err”加上x的值来创建变量err1,err2或err3?
err1 = 'error foo1'
err2 = 'error foo2'
err3 = 'error foo3'
x = 1
print err + x
答案 0 :(得分:3)
如果你想要变量变量名,你最好重新编写它以使用字典。
err = {
'1': 'This is Err1',
'2': 'This is Err2',
'3': 'This is Err3',
}
print err[str(x)]
答案 1 :(得分:2)
虽然你想做什么是可能的,但不建议这样做。相反,使用字典:
err={}
err[1] = 'error foo1'
err[2] = 'error foo2'
err[3] = 'error foo3'
print err[x]
虽然动态创建和引用变量是许多脚本语言的一个有趣的方面,但几乎总是以更直接的方式完成相同的事情。
答案 2 :(得分:1)
这不是真的推荐,但你想要:
x = 1
print getattr(__import__(__name__), 'err' + str(x))
# 'error foo1'
答案 3 :(得分:0)
是。使用str()
:
print 'err' + str(x)
但正如评论中的其他人指出的那样,通过连接字符串来动态构造变量名称并不是一种好办法。而是定义一个字典,如:
error_codes = {}
error_codes[1] = 'error foo1'
error_codes[2] = 'error foo2'
error_codes[3] = 'error foo3'
现在基于x
的值:
print error_codes[x]
答案 4 :(得分:0)
如果您必须这样做,可以使用locals()
通过动态名称(或globals()
来访问本地变量)。
例如:
foo0 = 'a'
foo1 = 'b'
foo2 = 'c'
for i in range(3):
name = 'foo%s' % i
value = locals().get(name)
print value
但是,对于locals()
,这应该被视为只读使用。修改locals()
中的值似乎在交互式解释器中起作用,但是unreliable。 (据我所知,修改globals()
中的值是可靠的,但我强烈建议在生产代码中这样做。)
如果您要使用的动态名称是对象的属性,则可以使用getattr(obj, name)
和setattr(obj, name, value)
,它们分别相当于value = obj.foo
和obj.foo = value
。那些是“安全的”并且可靠地工作。但是,因为它使代码很难在不运行的情况下阅读和理解,所以应该谨慎使用它们。
答案 5 :(得分:-3)
我想您只想显示字符串和整数值。因此,只需尝试使用格式说明符进行打印/显示:
例如,在您的情况下:print 'err%d'%x