如何在不需要 =True 的情况下使用 kwargs 作为标志?

How do I use kwargs as flags without needing =True?

我正在开发一个 python 模块,它可以获取 downloads/updates 然后自动安装其他模块。对于 "flags" 系统,我如何在不需要 =True 的情况下使用 **kwargs(或替代方案)?

总的来说,我不是很有经验,所以我不确定在这里做什么

目前,要使静默标志起作用,它必须如下所示:

pyup.imp(["psutil","shutil","os","sys","pyinstaller"],silent=True)

但我希望调用函数看起来像这样:

pyup.imp(["psutil","shutil","os","sys","pyinstaller"],silent)

函数本身看起来像这样(在 pyup.py 中):

def imp(libs = [], *args, **kwargs):

其中 libs[] 是包含所需库的数组。

如何使函数调用不需要“=True”?

如果我们这样定义一个函数,你不能:

def imp(libs = [], *args, **kwargs):

但是如果你这样定义函数,你可以:

def imp(libs = [], silent = True, *args, **kwargs):

事实上,正如您发布的那样,您可以毫无问题地使用此 运行:

silent = True
imp(["psutils", ...], silent)

只有在函数内部,kwargs 永远不会有键 silent,因为它由另一个参数持有。

如果您想将一系列字符串标志传递给您的函数(就像它是一个终端应用程序一样),您可以通过 *args.

将它们作为未命名的位置参数传递
def imp(libs=[], *args):
    silent = '--silent' in args

# somewhere else
imp([...], '--silent')