我有一堆变量,我需要获取为验证设置的变量的名称。例如:
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']
有没有一种简单的方法可以在不构建字典的情况下执行此操作?
答案 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']