Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hướng dẫn dùng nargs cho nhiều đối số vị trí cùng kiểu trong Python

Giới thiệu

Khi chương trình cần nhiều đối số vị trí cùng kiểu dữ liệu (ví dụ: 2 số nguyên để thực hiện phép trừ), thay vì định nghĩa 2 đối số riêng biệt, ta có thể dùng nargs để yêu cầu chính xác N giá trị cùng kiểu.

Ví dụ: Trừ 2 số nguyên

import argparse

def get_args():
    parser = argparse.ArgumentParser(
        description='Ví dụ nargs',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )
    # nargs=2: yêu cầu chính xác 2 giá trị kiểu int
    parser.add_argument('numbers', metavar='int', nargs=2, type=int,
                        help='Hai số nguyên để trừ')
    return parser.parse_args()

def main():
    args = get_args()
    num1, num2 = args.numbers
    print(f"*** Trừ hai số - {num1} - {num2} = {num1 - num2}")

if __name__ == '__main__':
    main()

Chạy thử

$ python test.py 30 10
*** Trừ hai số - 30 - 10 = 20

$ python test.py 10 30
*** Trừ hai số - 10 - 30 = -20

$ python test.py 10 10 30
usage: test.py [-h] int int
test.py: error: unrecognized arguments: 30

$ python test.py
usage: test.py [-h] int int
test.py: error: the following arguments are required: int

Các giá trị thường dùng của nargs

Ví dụ nargs='*' (số lượng tùy ý)

parser.add_argument('numbers', metavar='int', nargs='*', type=int,
                    help='Danh sách số nguyên (có thể rỗng)')

# Chạy:
# python test.py 1 2 3 4 5  → args.numbers = [1,2,3,4,5]
# python test.py            → args.numbers = []

Ví dụ nargs='+' (ít nhất 1)

parser.add_argument('numbers', metavar='int', nargs='+', type=int,
                    help='Danh sách số nguyên (ít nhất 1)')

# Chạy:
# python test.py 1 2 3      → args.numbers = [1,2,3]
# python test.py            → error: required at least 1 argument

Lưu ý quan trọng

  • Khi dùng nargs > 1, kết quả trả về là list, cần unpack: num1, num2 = args.numbers.
  • metavar hiển thị trong help message, nên đặt tên gợi nhớ (ví dụ: 'int int' cho 2 số).
  • Kết hợp với choices để vừa giới hạn số lượng vừa giới hạn giá trị.

Kết hợp nargs và choices

parser.add_argument('scores', metavar='score', nargs=3, type=int,
                    choices=range(0, 101),
                    help='Ba điểm số từ 0-100')
Giá trịÝ nghĩa
N (số nguyên)Yêu cầu chính xác N đối số
'?'0 hoặc 1 đối số (tùy chọn)
'*'0 hoặc nhiều đối số (list)
'+'1 hoặc nhiều đối số (list)