[lang-ref] ( parse_positional_args_variant ) ( python )

def test_parse_positional_args_variant():
    # nargs 
    # Examples of positional arguments with nargs
    import argparse

    # Optional positional argument
    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('PARAM1', nargs='?')  # 0..1 value

    args = parser.parse_args([])
    assert args.PARAM1 is None

    args = parser.parse_args(['A'])
    assert args.PARAM1 == 'A'

    # A more complex case (for demonstration only; not recommended as an interface)
    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('PARAM1', nargs='?')  # 0..1 value
    parser.add_argument('PARAM2', nargs='*')  # 0..n values (list)
    parser.add_argument('PARAM3', nargs='+')  # 1..n values (list)

    # Satisfying the required argument (PARAM3) takes precedence
    args = parser.parse_args(['A'])
    assert args.PARAM1 is None
    assert args.PARAM2 == []
    assert args.PARAM3 == ['A']

    # Once the required part is satisfied, earlier arguments can take values
    args = parser.parse_args(['A', 'B', 'C', 'D'])
    assert args.PARAM1 == 'A'
    assert args.PARAM2 == ['B', 'C']
    assert args.PARAM3 == ['D']