检查命名空间中是否存在变量

Pet*_*kel 11 python namespaces argparse

我正在尝试使用 argparse 的输出(简单的 argparse 只有 4 个位置参数,函数的每次启动都取决于设置为 True 的变量)

Namespace(battery=False, cache=True, health=False, hotspare=False)
Run Code Online (Sandbox Code Playgroud)

目前,我正在尝试找出如何最好地要求 python 查看这些变量之一何时设置为 True;不必像我现在那样进行硬编码:

if args.battery is True:
    do_something()
elif args.cache is True:
    do_something_else()
etc ...
Run Code Online (Sandbox Code Playgroud)

我宁愿只使用一个命令来检查命名空间中是否存在变量以及它是否设置为 True;但我一生都无法弄清楚如何以有效的方式做到这一点。

con*_* yu 7

您可以使用hasattr(ns, "battery")(假设ns = Namespace(battery=False, cache=True, health=False, hotspare=False))。

vars(ns).get("battery")比我想象的干净得多。


Pet*_*kel 3

如果通过列表理解解决了我的问题(在使用提示使用 vars() 之后):

l = [ k for (k,v) in args.items() if v ]
Run Code Online (Sandbox Code Playgroud)

l 是字典中值为“True”的键列表