Trong dòng lệnh, tôi có thể chuyển các đối số đến tệp python như:
python script.py arg1 arg2
Tôi có thể truy xuất
1 2 3 4 5 63 và
1 2 3 4 5 64 trong
1 2 3 4 5 65 như:
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
Tuy nhiên, tôi muốn gửi các đối số từ khóa đến tập lệnh Python và truy xuất chúng làm từ điển:
python script.py key1=value1 key2=value2
Sau đó, tôi muốn truy cập các đối số từ khóa như một từ điển trong Python:
{'key1' : 'value1', 'key2' : 'value2'}
Điều này có thể?
Hỏi ngày 24 tháng 11 năm 2015 lúc 20:08Nov 24, 2015 at 20:08
3
Tôi nghĩ những gì bạn đang tìm kiếm là mô -đun Argparse //docs.python.org/dev/l Library/argparse.html.
Nó sẽ cho phép bạn sử dụng tùy chọn dòng lệnh và phân tích đối số.
ví dụ. Giả sử những điều sau cho script.py
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser[]
parser.add_argument['--arg1']
parser.add_argument['--arg2']
args = parser.parse_args[]
print args.arg1
print args.arg2
my_dict = {'arg1': args.arg1, 'arg2': args.arg2}
print my_dict
Bây giờ, nếu bạn cố gắng:
$ python script.py --arg1 3 --arg2 4
Bạn sẽ thấy:
3
4
{'arg1': '3', 'arg2': '4'}
như đầu ra. Tôi nghĩ rằng đây là những gì bạn đã theo đuổi.
Nhưng đọc tài liệu, vì đây là một ví dụ rất được tưới về cách sử dụng Argparse. Chẳng hạnvery watered down example of how to use argparse. For instance the '3' and '4' I passed in are viewed as str's not as integers
Đã trả lời ngày 24 tháng 11 năm 2015 lúc 20:13Nov 24, 2015 at 20:13
user1245262user1245262user1245262
6.4387 Huy hiệu vàng46 Huy hiệu bạc72 Huy hiệu đồng7 gold badges46 silver badges72 bronze badges
0
Thí dụ. Hãy xem xét các bài kiểm tra tập lệnh sau.Py - #!/Usr/bin/python nhập sys in 'Số lượng đối số:', Len [sys. ....
Phân tích đối số dòng lệnh. Python cung cấp một mô-đun GetOpt giúp bạn phân tích các tùy chọn và đối số dòng lệnh. ....
GetOpt. Phương pháp GetOpt. ....
Ngoại lệ getopt. Getopterror ..
Các đối số từ khóa là một trong những tính năng python thường có vẻ hơi kỳ lạ đối với những người chuyển sang Python từ nhiều ngôn ngữ lập trình khác. Nó không giúp mọi người học Python thường khám phá các tính năng khác nhau của các đối số từ khóa từ từ theo thời gian.
Khi dạy Python, tôi đã thường muốn tôi có một bản tóm tắt về các tính năng liên quan đến đối số từ khóa khác nhau mà tôi có thể liên kết người học. Tôi hy vọng rằng bài viết này sẽ hoàn thành nhiệm vụ đó.
Trong bài viết này, tôi sẽ giải thích các đối số từ khóa là gì và tại sao họ sử dụng. Sau đó, tôi sẽ xem xét một số cách sử dụng nâng cao hơn của họ mà ngay cả các lập trình viên Python lâu năm cũng có thể đã bỏ qua vì khá nhiều điều đã thay đổi trong các phiên bản gần đây của Python 3. Nếu bạn đã là một lập trình viên Python có kinh nghiệm, bạn có thể muốn Bỏ qua cuối cùng. | Đối số từ khóa là gì? |
Chúng ta hãy xem xét các đối số từ khóa [còn được gọi là đối số có tên là].
Đầu tiên, hãy để Lừa lấy chức năng Python này:
Vì Python 3.6, các chức năng luôn bảo tồn thứ tự của các đối số từ khóa được truyền cho chúng [xem PEP 468]. Điều này có nghĩa là khi 12 được sử dụng để nắm bắt các đối số từ khóa, từ điển kết quả sẽ có các khóa theo cùng một thứ tự, các đối số đã được thông qua. | Vì vậy, kể từ Python 3.6, bạn sẽ không bao giờ thấy điều gì đó như thế này xảy ra: |
1 2
1 2 | 2 |
Thứ tự của những đối số này có vấn đề khi chúng được thông qua một vị trí:
3 | 4 |
Nhưng nó không quan trọng khi họ được truyền qua tên của họ:
3 | 4 |
Nhưng nó không quan trọng khi họ được truyền qua tên của họ:
3 | 4 |
Nhưng nó không quan trọng khi họ được truyền qua tên của họ:
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
6
3 | 4 |
Nhưng nó không quan trọng khi họ được truyền qua tên của họ:
1 2 | 6 |
Khi chúng ta sử dụng từ khóa/đối số được đặt tên, nó có tên quan trọng, không phải vị trí:
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
8
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
Vì vậy, không giống như nhiều ngôn ngữ lập trình khác, Python biết tên của các đối số mà chức năng của chúng tôi chấp nhận.
Nếu chúng tôi yêu cầu trợ giúp về chức năng của mình, Python sẽ cho chúng tôi biết ba đối số của chúng tôi theo tên:
0 | Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên: |
python script.py key1=value1 key2=value2
2Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.
0 | Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên: |
python script.py key1=value1 key2=value2
2Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.
Tại sao sử dụng từ khóa đối số?
Khi gọi các chức năng trong Python, bạn sẽ thường phải chọn giữa việc sử dụng các đối số từ khóa hoặc đối số vị trí. Đối số từ khóa thường có thể được sử dụng để thực hiện các cuộc gọi chức năng rõ ràng hơn.
0 | Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên: |
python script.py key1=value1 key2=value2
2Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.
- Tại sao sử dụng từ khóa đối số?
- Khi gọi các chức năng trong Python, bạn sẽ thường phải chọn giữa việc sử dụng các đối số từ khóa hoặc đối số vị trí. Đối số từ khóa thường có thể được sử dụng để thực hiện các cuộc gọi chức năng rõ ràng hơn.
- Lấy mã này:
python script.py key1=value1 key2=value2
3
python script.py key1=value1 key2=value2
python script.py key1=value1 key2=value2
4Điều này lấy một đối tượng tệp
1 2 3 4 5 66 và
1 2 3 4 5 67 và ghi một phiên bản Gzipped của chuỗi vào tệp đầu ra.
Mã này làm điều tương tự nhưng nó sử dụng các đối số từ khóa thay vì các đối số vị trí:
1 2 | 6 |
Lưu ý rằng sử dụng kiểu cuộc gọi từ khóa này cho thấy rõ hơn những gì mỗi trong ba đối số này đại diện.
0 | Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên: |
python script.py key1=value1 key2=value2
2Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.
3 | 4 |
Nhưng nó không quan trọng khi họ được truyền qua tên của họ:
6 | Khi chúng ta sử dụng từ khóa/đối số được đặt tên, nó có tên quan trọng, không phải vị trí: |
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
8Vì vậy, không giống như nhiều ngôn ngữ lập trình khác, Python biết tên của các đối số mà chức năng của chúng tôi chấp nhận.
Nếu chúng tôi yêu cầu trợ giúp về chức năng của mình, Python sẽ cho chúng tôi biết ba đối số của chúng tôi theo tên:
python script.py key1=value1 key2=value2
0
Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên: | 2 |
Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.: If you haven’t seen that
1 23 syntax before,
1 26 captures all positional arguments given to the
1 27 function into a tuple which the
1 28 variable points to.
Tại sao sử dụng từ khóa đối số?
6 | Khi chúng ta sử dụng từ khóa/đối số được đặt tên, nó có tên quan trọng, không phải vị trí: |
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
8
Vì vậy, không giống như nhiều ngôn ngữ lập trình khác, Python biết tên của các đối số mà chức năng của chúng tôi chấp nhận. | Nếu chúng tôi yêu cầu trợ giúp về chức năng của mình, Python sẽ cho chúng tôi biết ba đối số của chúng tôi theo tên: |
python script.py key1=value1 key2=value2
0
Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên: | 2 |
Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.
Đối số chỉ có từ khóa mà không có đối số vị trí
Điều gì sẽ xảy ra nếu bạn muốn chấp nhận các đối số chỉ từ khóa mà không chấp nhận các đối số vị trí không giới hạn?
Nếu bạn muốn chấp nhận các đối số chỉ từ khóa và bạn không sử dụng
1 23 để chấp nhận bất kỳ số lượng đối số vị trí nào, bạn có thể sử dụng
1 23 mà không cần bất cứ điều gì sau đó.
Ví dụ, ở đây, một phiên bản sửa đổi của chức năng Django từ ____105:
3 | 6 |
Không giống như việc triển khai
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
06 hiện tại của Django, phiên bản này không biết gọi import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
06 bằng cách chỉ định mọi đối số một cách vị trí. Các đối số import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
08, import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
09 và import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
10 phải được chỉ định bởi import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
11 của họ.
1 2 3 4 5 6 | 8 |
Giống như với các đối số vị trí không giới hạn, các đối số từ khóa này có thể được yêu cầu. Ở đây, một chức năng với bốn đối số chỉ cần từ khóa cần thiết:
9 | 0 |
Hàm này yêu cầu tất cả các đối số của nó được chỉ định bằng tên của họ:
3 | 2 |
Yêu cầu các đối số được đặt tên có thể thực hiện các cuộc gọi đến chức năng của chúng tôi rõ ràng hơn nhiều.
Mục đích của cuộc gọi chức năng này:
3 | 4 |
Rõ ràng hơn nhiều so với cái này:
3 | 4 |
Rõ ràng hơn nhiều so với cái này:
$ python script.py --arg1 3 --arg2 4
6
$ python script.py --arg1 3 --arg2 4
Một lần nữa lưu ý rằng cú pháp này cũng chỉ hoạt động trong Python 3.
Nắm bắt các đối số từ khóa tùy ý
Điều gì sẽ xảy ra nếu bạn muốn viết một hàm ghi lại một số lượng đối số từ khóa tùy ý? | Ví dụ: phương thức định dạng chuỗi chấp nhận bất kỳ đối số từ khóa nào bạn đưa ra: |
1 2
$ python script.py --arg1 3 --arg2 4
8
1 2 3 4 5 6 | 8 |
Giống như với các đối số vị trí không giới hạn, các đối số từ khóa này có thể được yêu cầu. Ở đây, một chức năng với bốn đối số chỉ cần từ khóa cần thiết:
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser[]
parser.add_argument['--arg1']
parser.add_argument['--arg2']
args = parser.parse_args[]
print args.arg1
print args.arg2
my_dict = {'arg1': args.arg1, 'arg2': args.arg2}
print my_dict
9
Điều gì sẽ xảy ra nếu bạn muốn viết một hàm ghi lại một số lượng đối số từ khóa tùy ý? | Ví dụ: phương thức định dạng chuỗi chấp nhận bất kỳ đối số từ khóa nào bạn đưa ra: |
1
2
$ python script.py --arg1 3 --arg2 4
8Làm thế nào bạn có thể viết một chức năng như vậy?
Python cho phép các chức năng nắm bắt bất kỳ đối số từ khóa nào được cung cấp cho chúng bằng toán tử
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
12 khi xác định chức năng:
3 | 6 |
Không giống như việc triển khai
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
06 hiện tại của Django, phiên bản này không biết gọi import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
06 bằng cách chỉ định mọi đối số một cách vị trí. Các đối số import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
08, import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
09 và import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
10 phải được chỉ định bởi import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
11 của họ.1 2 3 4 5 6
3 | 8 |
Giống như với các đối số vị trí không giới hạn, các đối số từ khóa này có thể được yêu cầu. Ở đây, một chức năng với bốn đối số chỉ cần từ khóa cần thiết:
3 | 9 |
0: We’re also using the $ python script.py --arg1 3 --arg2 4
1 23 operator here for the same kind of capturing and unpacking of positional arguments.
Hàm này yêu cầu tất cả các đối số của nó được chỉ định bằng tên của họ:
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser[]
parser.add_argument['--arg1']
parser.add_argument['--arg2']
args = parser.parse_args[]
print args.arg1
print args.arg2
my_dict = {'arg1': args.arg1, 'arg2': args.arg2}
print my_dict
3 $ python script.py --arg1 3 --arg2 4
2
Điều gì sẽ xảy ra nếu bạn muốn viết một hàm ghi lại một số lượng đối số từ khóa tùy ý? | Ví dụ: phương thức định dạng chuỗi chấp nhận bất kỳ đối số từ khóa nào bạn đưa ra: |
1 2
Điều gì sẽ xảy ra nếu bạn muốn viết một hàm ghi lại một số lượng đối số từ khóa tùy ý? | Ví dụ: phương thức định dạng chuỗi chấp nhận bất kỳ đối số từ khóa nào bạn đưa ra: |
1
2
$ python script.py --arg1 3 --arg2 4
8Làm thế nào bạn có thể viết một chức năng như vậy?
Python cho phép các chức năng nắm bắt bất kỳ đối số từ khóa nào được cung cấp cho chúng bằng toán tử
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
12 khi xác định chức năng:3
4
{'arg1': '3', 'arg2': '4'}
0Toán tử import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
12 đó sẽ cho phép chức năng import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
14 của chúng tôi chấp nhận bất kỳ số lượng đối số từ khóa nào. Các đối số đã cho sẽ được lưu trữ trong một từ điển gọi là import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
15.
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
Ở đây, một ví dụ sử dụng chức năng của chúng tôi:level up your Python skills and get practice using Python-specific features, like keyword arguments, sign up for Python Morsels below.