将可能的标志映射到布尔列表有效方法?

Posted

技术标签:

【中文标题】将可能的标志映射到布尔列表有效方法?【英文标题】:Mapping possible flags to boolean list efficient method? 【发布时间】:2021-11-23 23:36:35 【问题描述】:

我有一个正在处理的项目,我想将用户输入中的可能标志(例如“-s”)传递到一个布尔列表中,从中我可以找到用户请求的特定选项。

我目前的代码:

def run():
    running = True
    while running:

        user_input = input()
        dir_path = find_file_name(user_input[2:])
        flags = get_action(dir_path[1])
        file_dump = []

        options = [False] * 6

        if user_input[0] == "Q":
            running = False
            break

        elif user_input[0] == "L":
            options[0] = "-r" in flags
            options[1] = "-f" in flags
            options[2] = "-s" in flags
            options[3] = "-e" in flags

虽然这种技术有效,但我希望有更好的方法来完成最后一部分,根据输入中包含的标志设置选项。我也不是 100% 确定这是使用 run() 方法的好方法。任何的意见都将会有帮助!谢谢!

【问题讨论】:

【参考方案1】:

正如 jetpack_guy 所说,argparse 是执行此类操作的最佳方式。这个库有很多特性,但这里是如何根据你需要的参数创建布尔值。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-r', action='store_true')
parser.add_argument('-f', action='store_true')
parser.add_argument('-s', action='store_true')
parser.add_argument('-e', action='store_true')

args = parser.parse_args()

print(args.r)
print(args.f)
print(args.s)
print(args.e)

python test.py -r 会产生r: True, f: False, s: False, e: False

python test.py -r -f -s 会产生r: True, f: True, s: True, e: False

python test.py -rsf 会产生r: True, f: True, s: True, e: False

【讨论】:

【参考方案2】:

看看标准库argparse 模块。它可以满足您的需求以及更多功能。

see docs

【讨论】:

以上是关于将可能的标志映射到布尔列表有效方法?的主要内容,如果未能解决你的问题,请参考以下文章

此选项列表是不是可以接受数据库中的布尔标志?

Java 8将对象添加到列表的有效方法

创建布尔数据框,显示列表字典中每个元素的存在

跨进程发送文件的有效方法

在单CPU指令中可以在0和1之间翻转位/整数/布尔值的任何可能代码

跨越异步边界的布尔标志的线程安全