Con trăn getopt
Một trong những điểm mạnh của Python là nó có khả năng làm mọi thứ. Thư viện tiêu chuẩn của nó đi kèm với đủ tính năng để viết nhiều tập lệnh và công cụ hữu ích. Nếu cần bất cứ điều gì ngoài điều đó, nhiều tính năng hơn chỉ cách usage: run.py [-h] [--a A] --name NAME 8Hầu hết mọi ngôn ngữ lập trình hiện đại đều có khả năng nhận đối số từ dòng lệnh. Đây là một tính năng rất quan trọng vì nó cho phép người dùng nhập dữ liệu động, cho dù họ có viết chương trình hay không. Python đi kèm với một số thư viện khác nhau cho phép mã Python của bạn lấy đầu vào của người dùng từ lệnh bao gồm usage: run.py [-h] [--a A] --name NAME 9, usage: run.py [-h] [--a A] --name NAME 0 và usage: run.py [-h] [--a A] --name NAME 1. Ngày nay, usage: run.py [-h] [--a A] --name NAME 1 cho đến nay là tốt nhất và được sử dụng phổ biến nhấtThư viện Python argparse đã được phát hành như một phần của thư viện chuẩn với Python 3. 2. Sau bản phát hành đó và do tính phổ biến của nó, nó đã được tích hợp vào Python 2. 7 và tất cả các phiên bản Python trong tương lai, nhanh chóng trở thành tiêu chuẩn vàng để làm việc với các đối số dòng lệnh. Nó có một số tính năng mong muốn giúp sử dụng các đối số dòng lệnh trong Python khá linh hoạt và hữu ích cho các chương trình của chúng tôi
Lưu ý đến tất cả các tính năng chính này, chúng ta hãy tham gia một chuyến tham quan có hướng dẫn về thư viện usage: run.py [-h] [--a A] --name NAME 1 của PythonKỹ sư phần mềm Resume Builder. gitconnectedTạo miễn phí sơ yếu lý lịch kỹ thuật phần mềm chất lượng cao trong vòng chưa đầy 5 phút. Đồng bộ hóa hồ sơ của bạn và chúng tôi xử lý…gitconnected. com Thiết lập ban đầuĐể bắt đầu, hãy mở tập lệnh Python trống. Thư viện argparse được tích hợp sẵn trong Python, vì vậy chúng tôi không cần bất kỳ quy trình cài đặt nào. Đoạn mã dưới đây cho thấy cách tạo thiết lập ban đầu cho argparse Có 3 thành phần quan trọng trong đoạn mã trên
Bước 2 là nơi chúng ta tạo đối tượng trình phân tích cú pháp, trong đó chúng ta có thể thêm các đối số dòng lệnh cùng với một số tùy chọn cho mỗi đối số. Bước 3 chạy một hàm thực sự trích xuất các đối số từ dòng lệnh do người dùng nhập vào Cái hay là usage: run.py [-h] [--a A] --name NAME 1 sẽ tự động hoạt động với dòng lệnh chỉ với thiết lập đơn giản này. Hãy thử chạy chương trình với một usage: run.py [-h] [--a A] --name NAME 1 ở cuối và xem cách usage: run.py [-h] [--a A] --name NAME 1 in ra mô tả của chúng tôi về Hướng dẫn argparseBây giờ, hãy thêm một đối số dòng lệnh có tên là “a” như được hiển thị trong mã bên dưới. Để truyền đối số dòng lệnh cho tập lệnh Python, hãy thực thi nó bằng cách chạy usage: run.py [-h] [--a A] --name NAME 3Lưu ý cách chúng tôi sử dụng hàm usage: run.py [-h] [--a A] --name NAME 4 để chuyển “a” làm đối số dòng lệnh. Để truy cập vào biến mà chúng tôi nhận được từ usage: run.py [-h] [--a A] --name NAME 5, chúng tôi sử dụng usage: run.py [-h] [--a A] --name NAME 6Một điều quan trọng cần lưu ý là nếu chúng ta không chỉ định giá trị cho usage: run.py [-h] [--a A] --name NAME 5 tại dòng lệnh, thì usage: run.py [-h] [--a A] --name NAME 6 sẽ là usage: run.py [-h] [--a A] --name NAME 9. Một cách để giải quyết vấn đề này là chỉ định một giá trị mặc định cho usage: run.py [-h] [--a A] --name NAME 5 trong Trình phân tích cú pháp đối số như được hiển thị bên dưới. Lưu ý cách chúng tôi cũng đã thêm mô tả lần nàyTrong trường hợp này, nếu chúng ta không chuyển giá trị cho usage: run.py [-h] [--a A] --name NAME 5 qua dòng lệnh, thì giá trị của nó sẽ chỉ mặc định là 1. Bằng cách thêm một chuỗi cho biến usage: run.py [-h] [--a A] --name NAME 02, chúng tôi cũng có thể in ra một mô tả mạnh mẽ hơn cho từng biến khi áp dụng usage: run.py [-h] [--a A] --name NAME 1usage: run.py [-h] [--a A] --name NAME 2Cách sử dụng thông thường cho đối số dòng lệnhHãy đi sâu vào một số tùy chọn thú vị hơn với usage: run.py [-h] [--a A] --name NAME 1. Trước hết, chúng ta có thể chỉ định thông tin loại của từng biến sao cho việc chuyển đổi loại được thực hiện ngay trên đầu vàoMột cách tuyệt vời để đảm bảo rằng người dùng luôn chuyển một giá trị cho một đối số cụ thể là sử dụng từ khóa usage: run.py [-h] [--a A] --name NAME 05. Khi được đặt thành usage: run.py [-h] [--a A] --name NAME 06, điều này buộc người dùng phải nhập giá trị đó, nếu không chương trình sẽ báo lỗi và dừngNếu chúng tôi cung cấp một giá trị cho đối số usage: run.py [-h] [--a A] --name NAME 07 thì tất cả đều ổn. Nếu không, chúng tôi sẽ nhận được thông báo lỗi như thế nàyusage: run.py [-h] [--a A] --name NAME Chúng tôi cũng có thể giới hạn các giá trị có thể có cho một đối số dòng lệnh cụ thể bằng cách sử dụng đối số usage: run.py [-h] [--a A] --name NAME 08. Điều này đặc biệt hữu ích khi bạn có một tập hợp các câu lệnh if-else trong mã của mình để thực thi các thao tác nhất định dựa trên một chuỗi cụ thể. Kiểm tra mã dưới đây cho một ví dụBây giờ nếu chúng tôi nhập bất kỳ giá trị nào trong danh sách lựa chọn của mình, mã sẽ chạy tốt và nhận đối số usage: run.py [-h] [--a A] --name NAME 09 của chúng tôi. Nhưng nếu bạn đưa cho nó thứ gì đó không có trong danh sách, chẳng hạn như số usage: run.py [-h] [--a A] --name NAME 80, thì bạn sẽ nhận được một thông báo giống như bên dưới yêu cầu bạn chọn thứ gì đó từ danh sáchusage: run.py [-h] [--a A] --name NAME 0Thủ thuật và Cách sử dụng Nâng caoBây giờ là lúc để trở nên cáu kỉnh một chút với một số argparse nâng cao Đối số usage: run.py [-h] [--a A] --name NAME 81 cho phép chúng tôi chỉ định một số hành động mà chúng tôi muốn Trình phân tích cú pháp đối số của chúng tôi thực hiện. Ví dụ: chúng tôi có thể muốn có một đối số được tự động đặt thành boolean của usage: run.py [-h] [--a A] --name NAME 06 nếu nó tồn tại hoặc là một hằng số. Cả hai trường hợp này được hiển thị trong ví dụ dưới đâyTrong đoạn mã trên, về cơ bản chúng ta đang nói rằng nếu có đối số dòng lệnh usage: run.py [-h] [--a A] --name NAME 5 thì usage: run.py [-h] [--a A] --name NAME 5 sẽ là usage: run.py [-h] [--a A] --name NAME 06, nếu không thì usage: run.py [-h] [--a A] --name NAME 5 sẽ là usage: run.py [-h] [--a A] --name NAME 87. Tương tự, nếu có đối số dòng lệnh usage: run.py [-h] [--a A] --name NAME 88, thì nó phải được đặt thành giá trị là usage: run.py [-h] [--a A] --name NAME 89, nếu không thì nó sẽ là usage: run.py [-h] [--a A] --name NAME 9 vì không có giá trị mặc địnhChúng tôi cũng có thể thiết lập những gì được gọi là nhóm loại trừ lẫn nhau. Điều này làm là xác định một tập hợp các đối số dòng lệnh của trình phân tích cú pháp loại trừ lẫn nhau — tôi. e rằng các đối số dòng lệnh đó không thể được truyền cùng lúc Hãy xem xét đoạn mã dưới đây như một ví dụ Các đối số usage: run.py [-h] [--a A] --name NAME 1 usage: run.py [-h] [--a A] --name NAME 5 và usage: run.py [-h] [--a A] --name NAME 88 được thêm vào cùng một nhóm loại trừ lẫn nhau. Do đó, Python sẽ không cho phép bạn gửi usage: run.py [-h] [--a A] --name NAME 5 và usage: run.py [-h] [--a A] --name NAME 88 cùng lúc như thế này usage: run.py [-h] [--a A] --name NAME 96, bạn sẽ phải gửi từng cái một. Điều này hữu ích khi bạn muốn đảm bảo rằng người dùng không vượt qua bất kỳ biến xung đột nào cùng một lúc, để tránh mọi nhầm lẫn hoặc lỗiThích học hỏi? Theo dõi tôi trên Twitter, nơi tôi đăng tất cả về AI, Công nghệ và Khoa học mới nhất và tuyệt vời nhất. Kết nối với tôi trên LinkedIn nữa |