Chỉ cần có một cái nhìn vào các PEP 3102 cũng có vẻ như nó bằng cách nào đó liên quan đến this.
Để tóm tắt, các bản vá và lựa chọn có sẵn để chấp nhận các đối số biến nhưng sau đó là chấp nhận các đối số từ khóa. Các đối số từ khóa được chuyển như một từ điển ở đó là variable positional arguments would be wrapped as tuples.
Từ ví dụ của bạn
def import_(ui, repo, patch1=None, *patches, **opts):
Bất kỳ tham số vị trí sau u1,repo and patch1
sẽ được bao bọc như bản ghi trong các bản vá lỗi. Bất kỳ đối số từ khoá nào sau các đối số vị trí biến sẽ được bao bọc dưới dạng đối tượng Dictionary thông qua các opts.
Một điều quan trọng nữa là, onus nằm với người gọi để đảm bảo rằng điều kiện non-keyword arg after keyword arg
không bị vi phạm.
Vì vậy, điều gì đó vi phạm điều này sẽ làm tăng lỗi cú pháp ..
Ví dụ
cuộc gọi như
import_(1,2,3,test="test")
import_(1,2,3,4,test="test")
import_(1,2,3,4,5)
import_(1,2,patch1=3,test="test")
là hợp lệ, nhưng
import_(1,2,3,patch1=4,5)
sẽ nâng cao một lỗi cú pháp SyntaxError: non-keyword arg after keyword arg
Trong trường hợp hợp lệ đầu tiên import_(1,2,3,test="test")
u1 = 1, repo = 2, patch1 = 3, patches =() and opts={"test":"test"}
Trong trường hợp giá trị thứ hai import_(1,2,3,patch1=4,test="test")
u1 = 1, repo = 2, patch1 = 3 , patches = (4) and opts={"test":"test"}
Trong trường hợp giá trị thứ ba import_(1,2,3,4,5)
u1 = 1, repo = 2, patch1 = 3 , patches=(4,5), and opts={}
Trong trường hợp giá trị thứ tư import_(1,2,patch1=3,test="test")
u1 = 1, repo = 2, patch1 = 3 , patches=(), and opts={"test":"test"}
you can use patch1 as a keywords argument but doing so you cannot wrap any variable positional arguments within patches
Bạn đã giải quyết vấn đề này chưa? Nếu bạn có, nó sẽ là tốt nếu bạn sẽ chọn câu trả lời mà làm cho bạn giải quyết vấn đề là "chấp nhận", và upvote tất cả những người hữu ích (nếu bạn đã không làm điều đó rồi!). :) – mac
xin lỗi, tôi đã rất bận rộn tất cả những ngày này. Bây giờ tôi sẽ đọc về câu trả lời của bạn và chọn câu trả lời. Cảm ơn tất cả các bạn :) – guoqiao