2010-01-22 2 views
5

Định dạng của chữ ký chức năng trong tài liệu Python là một chút khó hiểu. Có ý nghĩa gì khi đặt dấu phẩy sau dấu ngoặc mở chứ không phải trước đây? Ý nghĩa của việc lồng dấu ngoặc vuông là gì?Tại sao tài liệu chức năng Python bao gồm dấu phẩy sau khung cho các tùy chọn args?

Làm sao họ là:

RegexObject.match(string[, pos[, endpos]]) 

Tôi mong chờ một trong các cách sau:

RegexObject.match(string, [pos], [endpos]) 
RegexObject.match(string[, pos][, endpos]) 

Trả lời

16

Các khung vuông có nghĩa là nội dung là không bắt buộc, nhưng tất cả mọi thứ bên ngoài dấu ngoặc vuông là bắt buộc.

Với ký hiệu của bạn:

RegexObject.match(string, [pos], [endpos]) 

tôi mong chờ để phải viết:

r.match("foo",,) 

Các tổ là cần thiết bởi vì nếu bạn cung cấp các thông số thứ ba thì bạn cũng phải cung cấp các tham số thứ hai thậm chí mặc dù nó là một tham số tùy chọn. Lựa chọn không lồng nhau sau đây sẽ không rõ ràng:

RegexObject.match(string[, pos][, endpos]) 
2

Dấu ngoặc mở cho biết đối số tùy chọn. Nếu dấu phẩy nằm ngoài khung, bạn sẽ phải nhập dấu phẩy ngay cả khi bạn không muốn sử dụng đối số pos (ví dụ).

2

Vì nếu không, cú pháp chính xác sẽ bao gồm dấu phẩy ngay cả khi bạn bỏ qua các đối số. Các phần bên trong dấu ngoặc vuông là tùy chọn, do đó bằng cách di chuyển dấu phẩy ra khỏi các dấu ngoặc vuông, chúng không còn là tùy chọn nữa. Ví dụ, để gọi hàm dưới đây với chỉ một chuỗi:

RegexObject.match(string, [pos], [endpos]) 

Tôi sẽ phải làm:

RegexObject.match("foobar",,) 

Nhưng, đó không phải là rất thanh lịch.

0

Nếu bạn nghĩ về các dấu ngoặc bao quanh tất cả các thành phần tùy chọn của danh sách đối số, nó có ý nghĩa hơn. Về cơ bản, bất cứ điều gì bên trong dấu ngoặc đơn có thể được bỏ ra theo quyết định của người dùng.

0

Dấu ngoặc có nghĩa là bạn có thể bỏ phần giữa chúng. Vì vậy, nếu các tài liệu sẽ được viết theo cách bạn đề xuất, nó sẽ ngụ ý rằng bạn có thể viết RegexObject.match (chuỗi ,,) bằng cách để lại mọi thứ trong ngoặc đơn. Hoặc RegexObject.match (chuỗi ,, endpos) bằng cách chỉ cần thoát ra khỏi thứ hai. Nhưng bạn không thể. Nếu bạn rời khỏi endpos, bạn cũng phải bỏ dấu phẩy ra trước nó. Và nếu bạn rời khỏi vị trí, bạn phải bỏ dấu phẩy ra trước nó cũng như kết thúc. Vì vậy, nó được viết theo cách mà làm cho rõ ràng.