CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.
Bài đăng trên blog CFSDN này Giới thiệu về Python: Phân tích tóm tắt về hàm argparse nargs='+' được tác giả thu thập và biên soạn. Nếu bạn quan tâm đến bài viết này, vui lòng thích nó.
Tôi sẽ không nói nhiều đâu, chỉ cần nhìn vào mã thôi~.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
|
nhập khẩu
hệ điều hành
nhập khẩu
phân tích đối số
bộ phân tích cú pháp
=
argparse.ArgumentParser(mô tả
=
'Xử lý một số số nguyên...'
)
bộ phân tích cú pháp.thêm_tham_số(
'số nguyên'
,metavar
=
'N'
,
kiểu
=
số nguyên
,nargs
=
'+'
,
giúp đỡ
=
'một số nguyên cho bộ tích lũy'
)
bộ phân tích cú pháp.thêm_tham_số(
'--tổng'
, đích đến
=
'tích lũy'
,hoạt động
=
'store_const'
,
hằng số
=
tổng hợp
,mặc định
=
tối đa
,
giúp đỡ
=
'tính tổng các số nguyên (mặc định: tìm giá trị lớn nhất)'
)
các đối số
=
bộ phân tích cú pháp.parse_args()
in
(đối số)
in
(args.số nguyên)
in
(args.accumulate(args.integers))
|
?
1
2
3
4
5
6
7
8
9
|
nhập khẩu
phân tích đối số
định nghĩa
suy ra(đối số):
vì
hình ảnh
TRONG
đối số.hình ảnh:
in
(
"\n=== {} ==="
.
định dạng
(hình ảnh))
nếu như
__tên__
=
=
'__chủ yếu__'
:
bộ phân tích cú pháp
=
argparse.ArgumentParser()
bộ phân tích cú pháp.thêm_tham_số(
'--hình ảnh'
,
kiểu
=
đường
,nargs
=
'+'
)
các đối số
=
bộ phân tích cú pháp.parse_args()
suy ra(đối số)
|
kết quả.

Kiến thức bổ sung: argparse phân tích cú pháp các đối số dòng lệnh.
Giới thiệu về argparse:
Trong argparse, ba phần trên được sử dụng phổ biến nhất: tạo đối tượng ArgumentParser; sử dụng phương thức add_argument() để thêm các quy tắc phân tích đối số vào đối tượng ArgumentParser đã tạo; cuối cùng gọi parse_args() để phân tích nội dung đã truyền, dựa trên các quy tắc được thiết lập trong bước thứ hai và tạo đối tượng Namespace. Nếu không có tham số nào được truyền vào parse_args(), đầu vào dòng lệnh mặc định sẽ được lấy từ sys.argv.
Tạo ArgumentParser:
Nguyên mẫu hàm là:
ArgumentParser(prog=Không có,usage=Không có,description=Không có,epilog=Không có, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=Không có, argument_default=Không có,conflict_handler='error', add_help=True) .
1. prog: Tên của chương trình, mặc định là argv[0]. Nếu được thiết lập, bạn có thể sử dụng %(prog)s làm tham chiếu được định dạng trong thông tin trợ giúp (sửa đổi một chỗ và nó sẽ được áp dụng trên toàn cầu).
2. Cách sử dụng: Trường cách sử dụng của thông tin trợ giúp mô tả các cách sử dụng khác nhau của chương trình. Theo mặc định, nó sẽ được tự động tạo dựa trên add_argument().
3. mô tả: Một đoạn ký tự mô tả ngắn gọn chương trình thực hiện những gì và cách sử dụng nó. Theo mặc định, nó trống.
4. epilog: Đoạn ký tự sau đoạn ký tự đối số tùy chọn, theo mặc định là trống.
5. parents: Bộ phân tích cú pháp parent được kế thừa. Để tránh trùng lặp một số nội dung chung, bộ phân tích cú pháp parent sẽ đặt add_help=False khi khởi tạo. Điều này nhằm ngăn chặn bộ phân tích cú pháp parent và child ném ra các ngoại lệ do xung đột -h.
6. formatter_class: Định dạng đầu ra trợ giúp. Ngoài kiểu đầu ra, nếu được đặt thành ArgumentDefaultsHelpFormatter, giá trị mặc định được xác định sẽ tự động được thêm vào đầu ra trợ giúp.
7. prefix_chars: Các ký tự trước tùy chọn. Mặc định là '-'. Bạn có thể thêm các ký tự khác, chẳng hạn như '-+'. Tuy nhiên, nếu không bao gồm '-', tùy chọn tương ứng như '-h' không thể phân tích cú pháp.
8. fromfile_prefix_chars: Đôi khi các tệp được sử dụng để truyền tham số cho parse_args(). Để có thể nhận dạng các chuỗi tệp, chẳng hạn như "demo.txt", giá trị này cần được đặt, chẳng hạn như "@", sau đó tất cả các chuỗi bắt đầu bằng ký tự này được coi là tệp, vì vậy tham số được truyền cho parse_args() phải là @demo.txt. Trong tệp này, chỉ có thể có một tham số trên mỗi dòng. Ví dụ, '-f\nbar' trong tệp sẽ được phân tích thành ['-f','bar'].
9. argument_default: Nói chung, các giá trị mặc định được thêm vào bằng cách sử dụng add_argument() hoặc bằng cách thiết lập một số cặp khóa-giá trị bằng cách sử dụng set_defaults(). Tình huống còn lại là phải thiết lập mục này (tôi không hiểu chuyện gì đang xảy ra ở đây).
10. conflict_handler: Chiến lược giải quyết các tùy chọn xung đột trong giai đoạn add_argument(). Mặc định là error, nghĩa là ném ra một ngoại lệ. Nhìn chung, nếu bạn gặp xung đột, bạn chỉ cần ném một ngoại lệ. Tuy nhiên, nếu parents được thiết lập, thì khi bạn cần viết lại các quy tắc trong trình phân tích cú pháp parent, bạn cần thiết lập mục này để giải quyết. Tuy nhiên, việc viết lại là một sự khớp chính xác. Ví dụ, nếu quy tắc cũ định nghĩa -h/--help và bạn viết lại -h, thì --help vẫn là quy tắc cũ.
11. add_help: có nên thêm tùy chọn -h/--help hay không, mặc định là True. Khi giá trị là False, nó sẽ hoạt động như phần tử cha (thực tế, bạn có thể thiết lập phần tử con Parser để ghi đè lên nó). Mặc định là -h/--help. Nếu prefix_chars không chứa '-', ký tự đầu tiên trong đó sẽ được sử dụng để thay thế.
Gọi add_argument() để thêm các quy tắc phân tích cú pháp:
Nguyên mẫu hàm:
ArgumentParser.add_argument(tên hoặc cờ...[, hành động][, nargs][, const][, mặc định][, loại][, lựa chọn][, bắt buộc][, trợ giúp][, metavar][, đích]) .
1. tên hoặc cờ: Nếu là tham số vị trí, bạn cần truyền vào tên; nếu là tham số tùy chọn, bạn cần định nghĩa tham số đó, chẳng hạn như '-f', '--foo'.
2. hành động: xác định cách xử lý các tham số đầu vào.
action='store', giá trị mặc định, lưu các tham số đã truyền.
action='store_const', cần phải thêm const, nghĩa là giá trị của đối số không được nhập từ dòng lệnh mà được lấy từ giá trị của const.
action='store_true' hoặc action='store_false', một trường hợp đặc biệt của 'store_const', nghĩa là giá trị của const là True hoặc False.
action='append' có nghĩa là giá trị được truyền vào sẽ được sử dụng như một mục trong danh sách, điều đó có nghĩa là tùy chọn đó có thể xuất hiện nhiều lần trong dòng lệnh.
action='append_const', các mục được truyền vào danh sách được định nghĩa bởi const, thường được sử dụng trong các trường hợp cần nhiều đối số để truyền giá trị vào danh sách.
action='count', xuất ra số lần xuất hiện của đối số.
action='help', được thêm theo mặc định.
action='version', phiên bản cần được định nghĩa và khi sử dụng, thông tin phiên bản sẽ được xuất ra và thoát.
Việc tùy chỉnh được thực hiện bằng cách xác định lớp con argparse.Action. Trên thực tế, tất cả các tùy chọn trên đều được định nghĩa theo cách này.
3. nargs: Đối tượng ArgumentParser thường liên kết một hành động với đối số dòng lệnh. Đối số từ khóa nargs liên kết một hành động với số lượng đối số dòng lệnh khác nhau:
nargs=N, một tùy chọn có thể theo sau bởi nhiều tham số (khi action='append', nó vẫn là một tùy chọn theo sau bởi một tham số, nhưng tùy chọn có thể xuất hiện nhiều lần), số lượng tham số phải là giá trị của N, các tham số này sẽ tạo ra một danh sách, khi nargs=1, một danh sách có độ dài 1 sẽ được tạo ra.
nargs=?, nếu mục tương ứng không xuất hiện trên dòng lệnh, mục tương ứng sẽ được gán giá trị mặc định. Điều đặc biệt là đối với một tùy chọn, nếu tùy chọn này xuất hiện trên dòng lệnh nhưng không theo sau là tham số gán thì tùy chọn đó sẽ không được gán giá trị mặc định mà là giá trị const.
nargs=*, tương tự như N, nhưng không chỉ định độ dài của danh sách.
nargs=+ tương tự như *, nhưng khi không có tham số nào được truyền vào mục tương ứng, lỗi sẽ được báo cáo: quá ít đối số.
nargs=argparse.REMAINDER, tất cả các tham số còn lại được chuyển đổi thành một danh sách và được gán cho mục này. Phương pháp này thường được sử dụng để chuyển các tham số còn lại cho một trình phân tích cú pháp khác để phân tích cú pháp. Nếu nargs không được xác định, số lượng đối số được truyền sẽ được xác định bởi hành động, thường là một và không có danh sách nào có độ dài bằng một được tạo ra.
4. const: Được sử dụng khi định nghĩa action='store_const' hoặc action='append_const'. Một là khi nargs='?' được định nghĩa, tùy chọn sẽ xuất hiện trên dòng lệnh, nhưng không có tham số nào được gán giá trị sau nó và giá trị mặc định được truyền cho tùy chọn này.
5. default: giá trị mặc định.
Nếu là chuỗi, Parser sẽ sử dụng chuỗi đó làm giá trị dòng lệnh khi phân tích cú pháp và sử dụng giá trị của type để chuyển đổi type, nhưng nếu không, Parser sẽ sử dụng giá trị đã xác định mà không cần chuyển đổi type. Nếu nargs='?' hoặc nargs='*' được đặt, thì khi không có tham số nào được gán cho mục, giá trị được xác định theo mặc định sẽ được sử dụng.
Khi default=argparse.SUPPRESS, điều đó có nghĩa là nếu một mục không xuất hiện trong dòng lệnh, nó sẽ không được gán giá trị mặc định.
6. type: dùng để kiểm tra kiểu và chuyển đổi kiểu.
Sử dụng FileType có thể đơn giản hóa các thao tác với tệp. Bạn cũng có thể định nghĩa hàm của riêng mình, đầu vào là một chuỗi và đầu ra là chuỗi đã chuyển đổi. Khi thiết lập lựa chọn, việc kiểm tra kiểu trở nên dễ dàng hơn vì chỉ cần thực hiện một loạt so sánh.
7. Lựa chọn: Một phạm vi giá trị được đưa ra và lỗi sẽ được báo cáo nếu vượt quá phạm vi đó.
Khi kiểu cũng được định nghĩa, kiểu sẽ được sử dụng để kiểm tra kiểu trước, do đó giá trị trong các lựa chọn phải tuân theo định nghĩa của kiểu, nếu không sẽ báo lỗi trong quá trình parse_args(). Bất kỳ thứ gì hỗ trợ toán tử in đều có thể được gán cho các lựa chọn, do đó từ điển, danh sách, tập hợp và các vùng chứa khác đều được hỗ trợ.
8. bắt buộc: Theo mặc định, các tùy chọn tùy chọn (được đặt trước bằng dấu '-') được coi là không nhất thiết phải xuất hiện trong các tham số dòng lệnh, nhưng nếu required=True được đặt, chúng phải xuất hiện. Kiểu thiết lập này đi ngược lại với lẽ thường và cần phải tránh.
9. Trợ giúp: Thông tin trợ giúp.
Có thể sử dụng %(prog)s đã đề cập trước đó để định dạng tên chương trình tại đây. Ngoài ra, còn có %(default)s để định dạng giá trị default và %(type)s để định dạng giá trị type.
Đặt thành argparse.SUPPRESS để ẩn thông tin trợ giúp.
10. metavar: Khi Parser tạo thông tin trợ giúp, các ký tự được yêu cầu để biểu diễn các giá trị cần truyền vào. (Phần này giống như dest và giá trị của dest được sử dụng.) Nếu là tham số vị trí, giá trị này sẽ được thay thế bằng chính nó; nếu là tham số tùy chọn, chữ hoa của giá trị này sẽ được sử dụng. Sử dụng metavar để thay thế chuỗi mặc định.
11. dest: Hầu hết các tùy chọn cần được gán giá trị thông qua dòng lệnh. Tên của các giá trị này được xác định bởi dest. Các quy tắc mặc định giống như các quy tắc được mô tả trong metavar.
Gọi parse_args() để phân tích cú pháp.
Nguyên mẫu hàm:
ArgumentParser.parse_args(args=Không có, không gian tên=Không có).
Chuyển đổi args thành giá trị của đối tượng không gian tên. Theo mặc định, sys.argv được gán cho args và một đối tượng Namespace trống được tạo ra. Trong quá trình phân tích cú pháp, các tham số được truyền vào sẽ được kiểm tra và lỗi sẽ được báo cáo nếu chúng không đáp ứng các yêu cầu. Nhìn chung, nó sẽ tự động xác định xem giá trị được truyền vào là tham số tùy chọn hay số âm (cả hai đều bắt đầu bằng '-'). Nhưng đôi khi giá trị của tham số vị trí phải bắt đầu bằng dấu '-', chẳng hạn như '-f', khi đó sử dụng parser.parse_args(['--', '-f']), '--' nghĩa là tất cả các giá trị tiếp theo cần được coi là tham số vị trí. parse_args() sẽ trả về đối tượng Namespace đã được điền thông tin.
Ví dụ:
Lấy ví dụ về việc phân tích cú pháp dòng lệnh trong mã rcnn nhanh hơn:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
|
nhập khẩu
phân tích đối số
nhập khẩu
hệ thống
định nghĩa
phân tích đối số():
bộ phân tích cú pháp
=
argparse.ArgumentParser(mô tả
=
'Đào tạo mạng lưới R-CNN nhanh'
)
bộ phân tích cú pháp.thêm_tham_số(
'--cfg'
, đích
=
'tệp cfg'
,
giúp đỡ
=
'tệp cấu hình tùy chọn'
,mặc định
=
Không có
,
kiểu
=
đường
)
bộ phân tích cú pháp.thêm_tham_số(
'--cân nặng'
, đích
=
'cân nặng'
,
giúp đỡ
=
'khởi tạo với trọng số mô hình được đào tạo trước'
,
kiểu
=
đường
)
bộ phân tích cú pháp.thêm_tham_số(
'--imdb'
, đích
=
'tên_imdb'
,
giúp đỡ
=
'bộ dữ liệu để đào tạo'
,mặc định
=
'voc_2007_trainval'
,
kiểu
=
đường
)
bộ phân tích cú pháp.thêm_tham_số(
'--imdbval'
, đích
=
'tên_imdbval'
,
giúp đỡ
=
'bộ dữ liệu để xác thực'
,mặc định
=
'voc_2007_kiểm tra'
,
kiểu
=
đường
)
bộ phân tích cú pháp.thêm_tham_số(
'--lặp lại'
, đích
=
'max_iters'
,
giúp đỡ
=
'số lần lặp lại để đào tạo'
,mặc định
=
70000
,
kiểu
=
số nguyên
)
bộ phân tích cú pháp.thêm_tham_số(
'--nhãn'
, đích
=
'nhãn'
,
giúp đỡ
=
'thẻ của mô hình'
,mặc định
=
Không có
,
kiểu
=
đường
)
bộ phân tích cú pháp.thêm_tham_số(
'--mạng lưới'
, đích
=
'mạng lưới'
,
giúp đỡ
=
'vgg16, res50, res101, res152, di động'
,mặc định
=
'res50'
,
kiểu
=
đường
)
bộ phân tích cú pháp.thêm_tham_số(
'--bộ'
, đích
=
'set_cfgs'
,
giúp đỡ
=
'đặt khóa cấu hình'
, mặc định
=
Không có
,nargs
=
argparse.REMAINDER)
nếu như
len
(sys. argv)
=
=
1
:
trình phân tích cú pháp.print_help()
sys. thoát(
1
)
các đối số
=
bộ phân tích cú pháp.parse_args()
trở lại
các đối số
nếu như
__tên__
=
=
'__chủ yếu__'
:
các đối số
=
phân tích cú pháp đối số()
in
(đối số)
|
Lưu mã trên dưới dạng test.py rồi nhập: python test.py vào dòng lệnh.
Kết quả là:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
sử dụng: test.py [
-
h] [
-
-
cfg CFG_FILE] [
-
-
cân nặng TRỌNG LƯỢNG] [
-
-
[IMDB_TÊN_IMDB]
[
-
-
imdbval IMDBVAL_NAME] [
-
-
[lặp lại MAX_ITERS] [
-
-
thẻ TAG]
[
-
-
mạng NET] [
-
-
bộ
...]
Luyện tập R nhanh
-
Mạng lưới CNN
đối số tùy chọn:
-
h,
-
-
giúp đỡ
hiển thị cái này
giúp đỡ
tin nhắn
Và
ra
-
-
cfg CFG_FILE cấu hình tùy chọn
tài liệu
-
-
trọng lượng TRỌNG LƯỢNG khởi tạo với trọng số mô hình được đào tạo trước
-
-
imdb IMDB_NAME tập dữ liệu để đào tạo trên
-
-
imdbval IMDBVAL_NAME
tập dữ liệu để xác thực trên
-
-
iters MAX_ITERS số lần lặp lại để đào tạo
-
-
tag TAG tag của mô hình
-
-
net NET vgg16, res50, res101, res152, di động
-
-
bộ
...
bộ
phím cấu hình
|
Nhập vào dòng lệnh
?
1
2
3
4
5
6
7
|
kiểm tra python.py
-
-
dữ liệu trọng lượng
/
trọng lượng imagenet
/
vgg16.ckpt \
-
-
imdb voc_2007_trainval \
-
-
imdbval voc_2007_test \
-
-
lặp lại
7000
\
-
-
thí nghiệm cfg
/
cfg
/
vgg16.yml \
-
-
mạng vgg16 \
-
-
bộ
ANCHOR_SCALES
"[8,16,32]"
TỶ LỆ_CHIẾN_NỐI
"[0,5,1,2]"
TÀU.BƯỚC
"[50000]"
|
Kết quả là:
Không gian tên(cfg_file='experiments/cfgs/vgg16.yml',imdb_name='voc_2007_trainval',imdbval_name='voc_2007_test', max_iters=7000, net='vgg16', set_cfgs=['ANCHOR_SCALES', '[8,16,32]', 'ANCHOR_RATIOS', '[0.5,1,2]', 'TRAIN.STEPSIZE', '[50000]'], tag=None, weight='data/imagenet_weights/vgg16.ckpt') .
Bài viết Python Introduction: argparse Analysis of the Function of nargs='+' ở trên là toàn bộ nội dung mà tôi chia sẻ với các bạn. Tôi hy vọng nó có thể cung cấp cho các bạn một tài liệu tham khảo, và tôi cũng hy vọng rằng các bạn sẽ ủng hộ tôi.
Liên kết gốc: https://blog.csdn.net/qq_37950540/article/details/82226961.
Cuối cùng, bài viết này về Python Introduction: argparse Brief Analysis of the Role of nargs='+' đã có tại đây. Nếu bạn muốn biết thêm về Python Introduction: argparse Brief Analysis of the Role of nargs='+', vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!