考虑以下示例:
def main():
a = 'predefined'
variables = {'a':'dynamic'}
locals().update(variables)
print a
if __name__ == '__main__':
main()
运行脚本时,我希望看到:
dynamic
但是我看到了
predefined
为什么呢?我怎样才能获得动态值?
我之所以问:我有一个程序需要很多输入参数,并且变量名称很长。我希望只需“解压缩”argparse
解析器在locals().update(...)
def main():
a = 'predefined'
parser = argparse.ArgumentParser(description='My program')
parser.add_argument('-a', type=int, default=a, required=False);
# Hoping to avoid typing lines like the following for every parameter:
# a = parser.parse_args().a
input_variables = vars(parser.parse_args())
locals().update(input_variables)
# Process stuff using the parameter names directly, e.g.
print a
答案 0 :(得分:6)
答案 1 :(得分:0)
您想在locals()
中创建变量吗?我建议创建一个空对象并将变量作为obj.var_name
访问。它几乎与var_name
一样可读,并且比exec
的所有游戏都要简单得多。
from copy import copy
class Empty(object):
pass
def main():
a = 'predefined'
b = 'predefined'
loc = copy(locals())
variables = {'a':'dynamic'}
loc.update(variables)
obj = Empty()
for k, v in loc.items(): #iteritems for Python 2
setattr(obj, k, v)
print(obj.a, obj.b) # print statement for Python 2