如何在Python中动态引用变量?

如何在Python中动态引用变量?,python,Python,我有以下代码: PROJECT_ID = 'test' BQ_TABLE_NAME_CATEGORIES = 'categories' BQ_TABLE_NAME_MANUFACTURERS = 'manufacturers' list = [BQ_TABLE_NAME_CATEGORIES, BQ_TABLE_NAME_MANUFACTURERS] table_categories = PROJECT_ID + '.' + BQ_TABLE_NAME_CATEGORIES table_man

我有以下代码:

PROJECT_ID = 'test'
BQ_TABLE_NAME_CATEGORIES = 'categories'
BQ_TABLE_NAME_MANUFACTURERS = 'manufacturers'
list = [BQ_TABLE_NAME_CATEGORIES, BQ_TABLE_NAME_MANUFACTURERS]
table_categories = PROJECT_ID + '.'  + BQ_TABLE_NAME_CATEGORIES
table_manufacturers = PROJECT_ID + '.' + BQ_TABLE_NAME_MANUFACTURERS

for table in list:
    ....
    source_objects=['table_{0}'.format(table)]  #reference to the correct var
    ....
但是,这会将字符串放入
源对象中。我希望它引用变量(变量中保存的内容)
这意味着我真正想要的是与之相当的:

table=BQ\u table\u NAME\u CATEGORIES

source_objects = [ table_categories ] 
table=BQ\u table\u NAME\u制造商时

source_objects = [ table_manufacturers ] 
可以使用eval()函数将字符串转换为变量:

输出:


另外,正如评论中所指出的,您确实不应该覆盖列表,而应该使用mylist或其他任何内容

如果我正确理解了您的问题,您要做的是将
表\u类别
表\u制造商
的值存储在名为
源\u对象
的列表中。 假设
表中的变量是全局变量

suffixes = [BQ_TABLE_NAME_CATEGORIES, BQ_TABLE_NAME_MANUFACTURERS]

source_objects = []
for s in suffixes:
    source_objects.append(globals['table_{0}'.append(s)])
    ...
这会让你:

>>> source_objects
['test.categories', 'test.manufacturers']

如果
表变量不是全局变量,请使用
locals()
。请参见

您是否试图在列表中获取
表_categories
中的内容?还是只想引用它的字符串值?另外,重写内置的
列表
对象是不好的做法。@RottenCandy我想要引用。。。源\u对象应包含表\u类别包含的任何内容。。就像我会做的:source\u objects=[表\u类别]
suffixes = [BQ_TABLE_NAME_CATEGORIES, BQ_TABLE_NAME_MANUFACTURERS]

source_objects = []
for s in suffixes:
    source_objects.append(globals['table_{0}'.append(s)])
    ...
>>> source_objects
['test.categories', 'test.manufacturers']