从 Python 中的命名空间对象导入变量

Ame*_*ina 2 python namespaces argparse

假设我有一个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
Run Code Online (Sandbox Code Playgroud)

我当然可以这样做:

some_parameter = args.some_parameter
Run Code Online (Sandbox Code Playgroud)

但如果我有大量参数,则每个参数都需要这样一行。

是否有另一种方法可以从命名空间导入变量,而不必逐一遍历它们?

PSfrom args import *不起作用。

PS2:我知道这是一个不好的做法,但这在某些极端情况下会有所帮助,例如我们在快速构建代码原型和测试

Mar*_*ers 5

使用函数的结果更新本地命名vars()空间

globals().update(vars(args))
Run Code Online (Sandbox Code Playgroud)

这通常不是一个好主意。将这些属性保留在命名空间中。

您可能会产生比使用此方法解决的问题更多的问题,特别是如果您意外地使用隐藏您关心的内置或本地名称的dest参数list配置参数,例如或print或其他内容。祝你找到那个bug 的乐趣!

Tim Peters 在他的《Python 之禅》中已经阐述了这一点:

命名空间是一个非常棒的想法——让我们多做一些这样的事情吧!

  • @FrancisAvila:如果解析器已经设置了合理的参数名称,那么这不一定是安全漏洞。在任何情况下都不能注入*任意*参数目标。此外,该程序的用户已经具有本地用户访问权限来运行它。 (2认同)