可以加入变量和数字来创建一个新变量吗?

时间:2014-04-22 18:19:30

标签: python

我正在使用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

6 个答案:

答案 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.fooobj.foo = value。那些是“安全的”并且可靠地工作。但是,因为它使代码很难在不运行的情况下阅读和理解,所以应该谨慎使用它们。

答案 5 :(得分:-3)

我想您只想显示字符串和整数值。因此,只需尝试使用格式说明符进行打印/显示:

例如,在您的情况下:print 'err%d'%x