从命名空间对象导入变量到Python中
假设我有一个命名空间叫做 args
,这个命名空间是通过调用 parser.parse_args()
得到的,它的作用是解析命令行参数。
我该如何将这个命名空间里的所有变量导入到我当前的命名空间呢?
比如说:
parser.add_argument('-p', '--some_parameter', default=1)
args = parser.parse_args()
# ... code to load all variables defined in the namespace args ...
print some_parameter
我当然可以这样做:
some_parameter = args.some_parameter
但是如果我有很多参数,那我就得为每个参数写一行这样的代码。
有没有其他方法可以一次性导入命名空间里的变量,而不需要一个个来处理呢?
附注: from args import *
这个方法是行不通的。
附注2: 我知道这样做并不是一个好习惯,但在某些特殊情况下,比如快速原型开发和测试时,这样做会很有帮助。
2 个回答
0
这可能是个最糟糕的主意:因为你可以把任何对象传给 parse_args()
,所以可以传入 __builtins__
模块,这样所有的属性就可以像本地变量一样被查找。
p = argparse.ArgumentParser()
p.add_argument("--foo")
p.parse_args( "--foo bar".split(), __builtins__)
print foo
这甚至会对那些目标不是有效 Python 标识符的参数“有效”:
# To use the example given by Francis Avila in his comment on Martijn Pieters' answer
getattr(__builtins__, '2my-param')