如何获取变量的字符串文字

时间:2012-04-26 19:24:36

标签: python

我有一堆变量,我需要获取为验证设置的变量的名称。例如:

studio = 'Warner Brothers'
movie = ''
validation = [studio, movie]

validation_errors = []
for item in validation:
    if not item:
        validation_errors.append(name of variable)

在上述情况下,我希望结果为:

validation_errors = ['movie']

有没有一种简单的方法可以在不构建字典的情况下执行此操作?

3 个答案:

答案 0 :(得分:6)

不要伤害自己。使用字典。简单比复杂更好。

validation = {'studio': studio, 'movie': movie}
validation_errors = []
for key in validation:
    if not validation[key]:
        validation_errors.append(key)

如果您发现自己想要像字典一样使用本地名称空间,那么99%的情况下您只需要字典。

答案 1 :(得分:0)

作为 NOT 如何做到这一点的示例(或者为了说明为什么不这样做),请尝试以下代码:

def nameof(thing):
    i = id(thing)
    names = [n for n in globals().keys() if id(globals()[n]) == i]
    for name in names:
        if name[0] != '_':
            return name, names
    return names[0], names

它有点有效,但只有当你传递它的东西是全局的,或者在全局变量中看起来像它的东西。由于字符串实习等原因,它也会返回各种奇怪的匹配。

答案 2 :(得分:0)

如果Python为你构建字典会有用吗?

studio = 'Warner Brothers'
movie = ''
validation = ['studio', 'movie']

validation_errors = []
for item in validation:
    if not locals()[item]:
        validation_errors.append(item)

然而,只是自己制作字典是更好的主意。

studio = 'Warner Brothers'
movie = ''
validation = dict(studio=studio, movie=movie)

validation_errors = []
for var, value in validation.items():
    if not value:
        validation_errors.append(var)

如果你想用它制作一个功能:

def validate(**vars):
    errors = []
    for var, value in vars.items():
        if not value:
            errors.append(var)
    return errors

-->studio = 'Warner Brothers'
-->movie = ''
-->print validate(studio=studio, movie=movie)
['movie']